ServerAliveInterval是SSH客户端保活核心参数,需配合ServerAliveCountMax使用;设为60表示每60秒发一次心跳包,连续3次无响应则断开,推荐在~/.ssh/config中按Host别名精确配置。

ServerAliveInterval 是客户端保活的核心参数
客户端主动维持连接靠的是 ServerAliveInterval,它控制 SSH 客户端每隔多少秒向服务器发一次空包。值设为 0 表示禁用,设为 60 就是每分钟探活一次。
这个参数只对当前连接生效,有三种写法:
- 命令行临时加:
ssh -o ServerAliveInterval=60 user@host - 用户级配置(推荐):在
~/.ssh/config里写入:Host *<br> ServerAliveInterval 60
- 系统级配置(慎用):改
/etc/ssh/ssh_config,影响所有本地用户
注意:ServerAliveInterval 必须配合 ServerAliveCountMax 才能真正防止断连。后者默认是 3,意思是连续 3 次没收到响应就断开。如果网络偶尔抖动,建议设成 5 或更高。
ClientAliveInterval 在服务端才起作用
服务器端不主动“保活”,而是定期“探测”客户端是否还在线。关键参数是 ClientAliveInterval,它定义了服务器多久发一次心跳包。
常见错误是只改了这个值却忘了 ClientAliveCountMax。比如设了 ClientAliveInterval 60,但 ClientAliveCountMax 还是默认的 3,那最多撑 3 分钟就断——这反而比默认更短。
合理组合示例:
-
ClientAliveInterval 60(每分钟发一次) -
ClientAliveCountMax 20(最多容忍 20 次无响应 → 实际保活上限 20 分钟) - 顺手打开
TCPKeepAlive yes,补底层 TCP 层的探测能力
改完必须重启服务:sudo systemctl restart sshd。操作中当前会话会断开,别在单连接里改完就关终端。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
别忽略 GSSAPIAuthentication 导致的登录卡顿
很多“SSH 超时”其实是登录阶段卡住,不是连接后断开。典型表现是输入密码后要等 10–30 秒才进 shell,容易误判为网络或超时问题。
根本原因是 GSSAPIAuthentication yes(默认开启),它尝试走 Kerberos 认证,但多数 Linux 服务器没配域名解析或 KDC,导致超时重试。
解决方法很简单:在 /etc/ssh/sshd_config 里加一行:
GSSAPIAuthentication no
然后重启 sshd。这不是保活设置,但能避免你花时间排查“为什么刚连上就卡”,尤其在内网或无 DNS 环境下几乎必开。
TMOUT 和 Bash 超时是另一层干扰项
TMOUT 是 Shell 级别的空闲超时,和 SSH 协议无关。设成 export TMOUT=0 可禁用,设成 export TMOUT=3600 是一小时无操作退出。
但它只影响登录后的交互式 shell,不会阻止 SSH 连接本身被中间设备(如防火墙、NAT 网关)切断。所以即使 TMOUT 设得再大,ClientAliveInterval 或 ServerAliveInterval 没配,照样断。
更麻烦的是:有些运维脚本或容器镜像会全局设 TMOUT=300,导致你反复配置 SSH 却始终断连——先检查 echo $TMOUT 和 /etc/profile、~/.bashrc 里有没有它。

















