ssh连接空闲断开可通过服务端、客户端及系统级配置协同优化:服务端设clientaliveinterval 60与clientalivecountmax 3;客户端在~/.ssh/config中配serveraliveinterval 60和serveralivecountmax 30;同时检查并禁用tmout等shell超时。

SSH连接默认空闲一段时间后会自动断开,这既是安全机制,也可能带来操作中断风险。若终端长期无人值守(比如跑后台任务、调试长时进程),又不希望连接意外中断,关键不是“取消超时”,而是合理设置保活与超时阈值,兼顾安全性与可用性。
服务器端:控制心跳与断连条件
修改 /etc/ssh/sshd_config,启用并配置服务端主动保活:
- ClientAliveInterval 60:服务器每60秒向客户端发送一次空包,确认连接活跃
- ClientAliveCountMax 3:连续3次未收到响应才断开连接,即总空闲容忍时间为180秒
- 这两项默认被注释,需取消注释并保存;修改后必须执行 sudo systemctl restart sshd 生效
客户端:主动维持连接状态
在本地用户级配置中设置更灵活的保活策略,尤其适合无权改服务器配置的场景:
- 编辑 ~/.ssh/config,添加以下内容:
- Host *
- ServerAliveInterval 60
- ServerAliveCountMax 30
- 表示客户端每60秒发一次保活包,连续30次失败才断开(即最长可容忍30分钟无响应)
补充防护:避免系统级超时干扰
某些Linux发行版或Shell环境会额外启用会话级超时,需一并检查:
- 运行 echo $TMOUT 查看是否设置了shell空闲超时;若输出为正整数(如900),说明5分钟后自动登出
- 如需禁用,可在 ~/.bashrc 或 /etc/profile 中添加 export TMOUT=0,然后重载配置
- 注意:TMOUT=0 表示禁用shell超时,仅建议在可信、受控环境中使用
工具类客户端适配
图形化SSH工具通常自带保活开关,无需改配置文件:
- SecureCRT:会话选项 → 终端 → 反空闲 → 勾选“发送协议 NO-OP”,设间隔(如60秒)
- PuTTY:Connection → Seconds between keepalives → 填60
- MobaXterm:Settings → SSH → 勾选“SSH keepalive”










