保持 ssh 连接稳定主要依靠客户端和服务端配合发送心跳包,防止因网络空闲超时被断开。具体做法是在 ~/.ssh/config 中配置 serveraliveinterval 和 serveralivecountmax,或者在服务器端的 /etc/ssh/sshd_config 中设置 clientaliveinterval。这样即使没有输入命令,ssh 也会定期发送探测包,确保连接不被防火墙或路由器丢弃。

如何配置本地 SSH 客户端的心跳检测
在本地用户目录下创建或编辑 ~/.ssh/config 文件,添加全局或特定主机的配置项。设置 ServerAliveInterval 60 表示每 60 秒发送一次请求,ServerAliveCountMax 3 表示如果连续 3 次无响应则断开。这种方式无需修改服务器配置,对普通用户最友好且立即生效。

Host *
ServerAliveInterval 60
ServerAliveCountMax 3
上述配置适用于所有主机。若只需针对某台服务器生效,可将 Host * 替换为具体的 Host example.com。保存后,再次使用 ssh user@example.com 连接时,客户端会自动启用该心跳机制。预期结果是终端在空闲期间不会断开,且网络监控工具中能看到定期的 TCP 数据包传输。
如何在服务端强制维持活跃连接
如果无法修改客户端配置,或者需要管理大量用户,可以在服务器端的全局配置 /etc/ssh/sshd_config 中启用 ClientAliveInterval。例如设置 ClientAliveInterval 300 和 ClientAliveCountMax 2,服务端将每 5 分钟向客户端发送一次存活检查,允许两次失败后断开。这能有效清理僵尸连接,释放服务器资源。

# /etc/ssh/sshd_config ClientAliveInterval 300 ClientAliveCountMax 2
修改配置文件后,必须执行 sudo systemctl restart sshd 重启服务才能生效。这种服务端策略对所有新建立的连接都有效,适合运维人员统一管控。注意,过短的时间间隔可能会增加不必要的网络开销,而过长则可能无法及时清理死链。
tmux 会话在 SSH 断开后是否保留
使用 tmux 或 screen 等终端复用工具,可以确保 SSH 连接意外断开后,后台运行的程序继续执行,重新连接后可恢复之前的工作界面。这是比单纯保持连接更高级的稳定性方案,特别适用于长时间运行的任务。

















