关键在于启用保活机制,而非直接修改超时值;需配置clientaliveinterval 60(每60秒发心跳)和clientalivecountmax 3(容忍3次无响应,即180秒空闲),并确认tcpkeepalive yes,修改后必须重启sshd服务。

服务器端调整 SSH 超时断开时间,关键不是改“超时”本身,而是启用并合理配置保活探测机制。默认情况下,SSH 服务不主动发心跳,空闲连接会被中间设备或系统内核直接清理。只要配好 ClientAliveInterval 和 ClientAliveCountMax 这两个参数,就能稳定维持连接。
确认当前配置再修改
别直接写新值——先查清楚服务器当前怎么设的:
- 执行命令:
grep -E "^(ClientAlive|TCPKeepAlive)" /etc/ssh/sshd_config - 特别注意云厂商镜像(如华为云、腾讯云)常预设
ClientAliveInterval 10+ClientAliveCountMax 1,实际就是 10 秒必断 - 如果行前有
#,说明被注释,未生效
修改 sshd_config 的核心三行
用 root 权限编辑 /etc/ssh/sshd_config,确保以下三行存在且未注释:
-
TCPKeepAlive yes:开启底层 TCP 保活,作为补充(非必须但建议) -
ClientAliveInterval 60:每 60 秒向客户端发一次探测包(别设低于 30,太小易被误判) -
ClientAliveCountMax 3:连续 3 次没收到响应才断开,即总容忍空闲时间为 180 秒(3 分钟)
重启服务让配置生效
保存文件后必须重启 SSH 服务,否则修改不生效:
- 多数现代系统:
sudo systemctl restart sshd - 部分旧系统:
sudo service ssh restart - 若只想重载配置不中断现有连接:
sudo systemctl reload sshd(但某些参数如LoginGraceTime必须 restart 才生效)
额外注意 LoginGraceTime 和 TMOUT
这两个参数也影响“超时表现”,但作用阶段不同:
-
LoginGraceTime 60:控制从建立 TCP 连接到完成认证(输密码/密钥)的最长等待时间,默认 120 秒,设太短会导致连不上 -
TMOUT=900(写在/etc/profile或用户~/.bashrc中):Shell 级闲置登出,优先级高于 SSH 保活,一旦启用会直接 kill 会话,与 ClientAlive 冲突











