SSH连接保活核心是客户端定期发送心跳包防断连,需合理配置ServerAliveInterval与ServerAliveCountMax,并协同服务端ClientAlive参数;推荐在~/.ssh/config中为特定Host设置,避免全局通配。

核心是让客户端定期“打招呼”,防止网络设备或服务端因空闲而切断连接。关键不在加密或压缩,而在心跳频率与容错策略的合理搭配。
客户端配置:在 ~/.ssh/config 中设置主动保活
这是最常用、最可控的方式,尤其适合你无法修改服务器配置的场景(比如连公司跳板机或云厂商托管主机)。
- 编辑 ~/.ssh/config,为特定主机添加以下参数(Host 名必须与 VSCode 或命令行中使用的完全一致):
Host my-prod-server
HostName 192.168.10.50
User admin
ServerAliveInterval 60
ServerAliveCountMax 3
TCPKeepAlive yes
-
ServerAliveInterval 60:每 60 秒向服务端发送一次 SSH 层心跳包(类型为
SSH_MSG_GLOBAL_REQUEST) - ServerAliveCountMax 3:连续 3 次未收到响应才断开,即最多容忍 3 分钟无响应
- TCPKeepAlive yes:启用底层 TCP 保活机制,作为 SSH 层心跳的补充,防底层连接被静默回收
- 避免使用
Host *全局通配——VSCode Remote-SSH 在某些版本中可能忽略它,建议显式写明 Host 别名
服务端协同:检查并调整 /etc/ssh/sshd_config
仅靠客户端发心跳还不够。如果服务端设置了更激进的超时策略,它会先动手断连。有 root 权限时务必检查并匹配:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 用
sudo grep -i "clientalive" /etc/ssh/sshd_config查看当前值 - 确保以下两行未被注释,并设为合理值:
ClientAliveInterval 60 ClientAliveCountMax 3
- 若服务端已设为
ClientAliveInterval 15(如部分华为云/腾讯云镜像默认),客户端即使设 60 也无用——服务端会在 45 秒内强制断开 - 改完必须重启服务:
sudo systemctl restart sshd - 可选但推荐:
TCPKeepAlive yes保持开启,与客户端 TCPKeepAlive 形成双保险
不同网络环境下的参数微调建议
固定套用 60/3 并非万能。根据实际链路质量动态调整,效果更稳:
- 公司内网(低延迟、防火墙宽松):ServerAliveInterval 60,ServerAliveCountMax 3
- 公网直连或跨国开发:ServerAliveInterval 30,ServerAliveCountMax 5(应对高延迟或偶发丢包)
- 经跳板机或多层 NAT 穿透:ServerAliveInterval 15,ServerAliveCountMax 10(缩短探测周期,提高存活率)
- 注意:间隔过短(如 ≤10)会增加无效流量,且可能被中间设备限速或拦截
快速验证与临时调试方法
改配置前想立刻确认是否生效?或只做一次紧急操作?命令行参数优先级最高,无需改文件:
- 临时启用保活:
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user@host - 加
-vvv查看心跳细节:ssh -o ServerAliveInterval=60 -vvv user@host,等待 60 秒后若出现debug3: send packet: type 80,说明心跳已发出 - VSCode 用户验证:连接成功后,在远程终端执行
ps aux | grep ssh,确认进程参数中包含ServerAliveInterval=60等字样

















