vscode 启动时不会自动重连远程服务器,所谓“自动重连”实为 ssh 保活机制维持的假象;真正有效的是 ~/.ssh/config 中的 serveraliveinterval 60、serveralivecountmax 3 和 tcpkeepalive yes,配合服务端 /etc/ssh/sshd_config 中 clientaliveinterval 60 等配置,并需执行 remote-ssh: kill vs code server on host 清理残留进程。

VSCode 启动时不会自动重连远程服务器——它压根不提供这个功能,所谓“自动重连”全是 SSH 保活机制在撑场子。
为什么 remote.SSH.keepAlive 设置无效
这个配置只管 VSCode 自己的控制通道(比如命令面板、设置同步),对终端、端口转发、文件监听这些核心子通道完全没影响。你看到连接“恢复”了,其实是底层 SSH 连接根本没断,VSCode 只是重新挂载 UI 层而已。remote.SSH.keepAlive 默认为 60,但改大或改小都无济于事——它不发任何网络包。
- 真正维持 TCP 连接活跃的是
ServerAliveInterval,必须写在~/.ssh/config里 - 如果只配客户端却没配服务端,
ServerAliveInterval发出的包会被sshd直接丢弃 -
remote.SSH.recoverUnresponsiveSession勾选后,能尝试恢复无响应会话,但它依赖底层连接未彻底断开
必须配置的 ~/.ssh/config 三行
编辑 ~/.ssh/config,在对应 Host 块中加入:
ServerAliveInterval 60 ServerAliveCountMax 3 TCPKeepAlive yes
-
ServerAliveInterval 60:每 60 秒发一次空包;设成 30 对多数 NAT 设备无必要,反而增加干扰 -
ServerAliveCountMax 3:连续三次收不到响应才断开,避免偶发丢包误判 -
TCPKeepAlive yes:必须显式开启,尤其 Windows 自带 OpenSSH 7.7p1 及更早版本可能跳过保活逻辑
服务端 /etc/ssh/sshd_config 不能漏配
登录服务器,检查 /etc/ssh/sshd_config 中这几行是否未被注释且值合理:
-
ClientAliveInterval 60:服务端主动探测客户端是否存活,不能只依赖客户端单向心跳 -
ClientAliveCountMax 3:和客户端ServerAliveCountMax匹配,否则保活包会被丢弃 -
TCPKeepAlive yes:服务端也得开,否则保活链路不完整
改完记得重启服务:sudo systemctl restart sshd
连接卡住或反复重试时先清残留进程
VSCode 异常退出后,vscode-server 进程可能还“活着”,占用端口导致新连接失败。这不是重连问题,而是资源冲突:
- 按
F1或Ctrl+Shift+P打开命令面板 - 输入并选择:
Remote-SSH: Kill VS Code Server on Host - 选中目标主机,等执行完成后再重连
这个动作比反复重启 VSCode 或等超时回收快得多,也是最容易被忽略的第一排查点。











