Linux SSH 连接频繁断开解决

1次阅读

linux ssh 连接频繁断开主因是默认保活机制触发,需配置服务端clientaliveinterval与clientalivecountmax、客户端serveraliveinterval与serveralivecountmax参数,并排查中间设备及终端空闲设置。

Linux SSH 连接频繁断开解决

Linux SSH 连接频繁断开,通常不是网络不稳定导致的,而是服务端或客户端的超时机制在起作用。默认情况下,OpenSSH 会主动关闭长时间无交互的连接,这是安全设计,但对需要长期保持连接的场景(比如远程开发、后台任务监控)很不友好。关键在于调整心跳保活参数,而不是盲目加大超时时间。

服务端配置:启用 KeepAlive 并合理设置间隔

修改 SSH 服务端配置文件 /etc/ssh/sshd_config,确保以下三行存在且未被注释:

  • TCPKeepAlive yes —— 允许底层 TCP 层发送保活探测包
  • ClientAliveInterval 60 —— 每 60 秒向客户端发一次存活探测(建议 30–120 秒之间)
  • ClientAliveCountMax 3 —— 连续 3 次探测无响应才断开连接(即最多容忍约 3 分钟无响应)

改完后执行 sudo systemctl restart sshd(或 sudo service ssh restart)使配置生效。

客户端配置:对特定主机或全局启用保活

在本地用户目录下的 ~/.ssh/config 中添加配置(若无此文件可新建),例如:

Host myserver     HostName 192.168.1.100     User alice     ServerAliveInterval 60     ServerAliveCountMax 3

这样每次用 ssh myserver 连接时就会自动启用心跳。若想对所有连接生效,可用通配符:

Host *     ServerAliveInterval 60     ServerAliveCountMax 3

临时应急:命令行直接指定保活参数

如果无法修改配置文件,也可在连接时用 -o 参数覆盖默认行为:

  • ssh -o “ServerAliveInterval=60” -o “ServerAliveCountMax=3” user@host
  • 配合 -f -N 可用于建立后台隧道:ssh -f -N -o “ServerAliveInterval=45” user@host

注意:-o 参数只对当次连接有效,适合调试或临时使用。

排查其他常见干扰因素

如果调了保活仍断连,需检查以下几点:

  • 中间网络设备(如路由器、防火墙)是否主动清理空闲 TCP 连接(常见于家用光猫或企业 NAT 设备),此时仅服务端/客户端保活可能不够,需同步调整设备的连接超时策略
  • 客户端终端(如 iTerm2、windows Terminal、MobaXterm)自身有空闲断开选项,需关闭对应设置
  • 服务器内存或负载过高导致 sshd 进程异常退出,可通过 journalctl -u sshd -n 50 查看日志

不复杂但容易忽略。

text=ZqhQzanResources