SSH服务器通过ClientAliveInterval和ClientAliveCountMax协同实现空闲连接自动断开,例如设为60和3时,180秒无响应即断连;需确保sshd_config中两参数启用、TMOUT未设置,并可选配置TCPKeepAlive增强可靠性。

要让服务器 SSH 接入主动超时并自动断开空闲连接,核心是配置服务端的保活探测机制,使其在客户端长时间无响应时终止会话。这不是“禁止连接”,而是安全、可控地清理闲置会话。关键在于两个参数协同作用,并确保不被更高优先级的机制(如 TMOUT)覆盖。
服务端配置 ClientAliveInterval 和 ClientAliveCountMax
这两个参数定义了 SSH 服务端如何判断一个连接是否“已失效”。它们必须同时启用且非注释状态,否则不生效。
-
ClientAliveInterval 60
表示服务器每 60 秒向客户端发送一次空包(NO-OP),用于探测连接是否还活跃。 -
ClientAliveCountMax 3
表示连续 3 次探测未收到响应后,sshd 主动关闭该 TCP 连接。
二者相乘即为最大容忍空闲时间:60 × 3 = 180 秒(3 分钟)。你可以按需调整,例如:
- 要求更严格(快速释放资源):
ClientAliveInterval 30+ClientAliveCountMax 2→ 60 秒断连 - 要求更宽松(适应高延迟网络):
ClientAliveInterval 120+ClientAliveCountMax 5→ 600 秒(10 分钟)
操作步骤:
- 编辑
/etc/ssh/sshd_config - 确保以下两行存在且前面没有
#:ClientAliveInterval 60 ClientAliveCountMax 3
- 保存后执行
sudo systemctl restart sshd(或reload,部分系统支持热重载)
必须检查并禁用 TMOUT 环境变量
即使上述配置正确,如果 shell 层设置了 TMOUT,它会优先触发退出,导致连接在 SSH 层保活生效前就被 shell 自己 kill 掉。
- 检查当前值:
echo $TMOUT
若输出数字(如300),说明已启用。 - 临时禁用:
unset TMOUT - 永久禁用:搜索
/etc/profile、/etc/bash.bashrc、~/.bashrc等文件,删除或注释掉类似export TMOUT=300的行。
⚠️ 注意:
TMOUT=0或未设置,才是保活配置起效的前提。
可选增强:启用 TCP 层保活
作为补充,可开启内核级 TCP keepalive,帮助穿越中间 NAT/防火墙:
- 在
/etc/ssh/sshd_config中添加:TCPKeepAlive yes
- 并建议同步调优系统参数(写入
/etc/sysctl.conf):net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 20
执行
sudo sysctl -p生效。
这样既保障协议层心跳,也加固底层传输链路。
不复杂但容易忽略










