Linux中SSH超时配置分四类:1. LoginGraceTime控制认证等待(默认120秒);2. ClientAliveInterval与ClientAliveCountMax控制服务端空闲断连;3. ServerAliveInterval与ServerAliveCountMax由客户端主动探测;4. TMOUT是shell级自动登出(优先级最高)。

Linux 中修改 SSH 服务的“客户端响应超时等待时间”,关键在于明确你指的是哪一阶段的等待:
- 是连接刚建立、还没输密码时的等待(比如输错密码卡住)?
- 还是登录成功后,长时间没操作被断开?
- 或者是客户端自己检测到连接假死,想主动退出?
这三类超时机制完全不同,配置位置、参数名和生效方式也不同。下面分清楚讲:
控制登录前认证等待时间(LoginGraceTime)
这是指 TCP 连接已建立,但用户还没完成密码/密钥认证的最大等待时长。默认通常为 120 秒,超时后连接直接关闭,不给重试机会。
- 编辑服务端配置:sudo nano /etc/ssh/sshd_config
- 添加或修改这一行(单位为秒):LoginGraceTime 60(设为 60 秒)
- 保存后重启服务:sudo systemctl restart sshd
- 注意:设为 0 表示禁用限制,存在安全风险,不建议
控制登录后空闲断连(服务端发起探测)
这是最常被误认为“客户端响应超时”的场景——其实是服务端在等客户端回应保活包。它决定“连着连着就断了”是否发生。
- 在 /etc/ssh/sshd_config 中设置两个参数:
- ClientAliveInterval 60:服务端每 60 秒发一次空包
- ClientAliveCountMax 3:连续 3 次无响应即断开(即最多空闲 180 秒)
- 两个参数必须同时存在才有效;只设 Interval 不设 CountMax 可能无效
- 改完同样要执行:sudo systemctl restart sshd
控制客户端主动探测并断开死连接
如果你发现终端黑屏、Ctrl+C 失效、ssh 进程僵在后台——这不是服务端踢人,而是客户端卡住了。这时需客户端自己“定期问问服务器还在不在”。
- 推荐配置到用户级客户端文件:~/.ssh/config
- 添加以下内容(对所有主机生效):
- Host *
- ServerAliveInterval 60
- ServerAliveCountMax 3
- 确保权限正确:chmod 600 ~/.ssh/config
- 也可单次使用命令行参数:ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@host
Shell 级闲置登出(TMOUT,优先级最高)
这个不是 SSH 协议行为,而是 shell 自己计时。一旦启用,它会覆盖上面所有 SSH 层保活逻辑。
- 全局生效(所有用户):echo "export TMOUT=900" | sudo tee -a /etc/profile
- 仅当前用户:echo "export TMOUT=900" >> ~/.bash_profile && source ~/.bash_profile
- 900 表示 15 分钟无任何键盘输入就自动退出 shell
- 注意:只要 TMOUT 非零,它就会强制中断会话,不管网络是否通畅


















