VSCode Remote SSH“试图重新连接”假死问题需客户端ServerAliveInterval和服务端ClientAliveInterval协同配置:本地~/.ssh/config设ServerAliveInterval 30、ServerAliveCountMax 2,服务端/etc/ssh/sshd_config设ClientAliveInterval 45、ClientAliveCountMax 3并重启sshd,避免数值相等或整数倍,同时排查Windows OpenSSH版本兼容性及vscode-server残留进程。

Remote SSH 显示 “试图重新连接” 却没真断开,是典型的 TCP 假死
这不是 VSCode 或远程服务器崩溃了,而是中间网络设备(比如公司防火墙、家用路由器、云服务商 NAT 网关)在连接空闲几十秒后单方面清除了 TCP 连接状态,但两端都还不知道——客户端以为还在连,服务端也还留着 socket,结果数据发不出去、心跳收不到,VSCode 就卡在 Reconnecting 状态原地打转。
必须同时配客户端 ServerAliveInterval 和服务端 ClientAliveInterval
只改一边等于白配。VSCode Remote-SSH 用的是系统 OpenSSH 客户端,它靠 ServerAliveInterval 主动发探测包;而服务端 sshd 靠 ClientAliveInterval 被动检测客户端是否存活。两者逻辑不同、不可替代。
- 本地
~/.ssh/config加入(注意 Host 名要和你在 VSCode 里选的一致):Host myserver HostName 192.168.1.100 User ubuntu ServerAliveInterval 30 ServerAliveCountMax 2 ConnectTimeout 10
- 远程服务器上确认
/etc/ssh/sshd_config有且未被注释:ClientAliveInterval 45 ClientAliveCountMax 3 TCPKeepAlive yes
- 改完必须执行
sudo systemctl restart sshd,否则配置不生效 - 别信
remote.SSH.keepAlive这个 VSCode 设置项——它只管控制通道,不影响终端、端口转发、文件同步等核心子通道
Windows 自带 OpenSSH 的 ServerAliveInterval 可能失效
PowerShell 内置的 OpenSSH(如 OpenSSH_for_Windows_7.7p1)在非交互式连接(比如 VSCode 后台启动的 SSH 进程)中会忽略 ServerAliveInterval。这是已知 Bug,不是你配错了。
- 运行
ssh -V查版本,如果含for_Windows且早于 8.1p1,大概率中招 - 升级方案:从 GitHub
Win32-OpenSSH下载新版,替换C:\Windows\System32\OpenSSH\下的文件 - 临时绕过:在 VSCode 设置里关掉
remote.ssh.useLocalServer,强制走独立 SSH 进程,有时能触发保活逻辑
vscode-server 残留进程会锁死新连接
VSCode 断连后没彻底清理远程的 vscode-server 进程,它可能还占着通信端口或 Unix socket。这时你点重连,新进程一上来就撞上旧资源,直接卡住不动,表现就是“一直 Reconnecting”,但 ssh user@host 命令本身却能登录成功。
- 在 VSCode 里按
Ctrl+Shift+P,输入并执行:Remote-SSH: Kill VS Code Server on Host - 选对应主机,等提示完成后再重试连接
- 别手动去服务器
kill -9,容易杀错进程;这个命令是 VSCode 官方提供的安全清理方式
最易被忽略的是:ServerAliveInterval 和 ClientAliveInterval 的数值不能相等,也不能成整数倍关系(比如都设 60),否则探测节奏可能被中间设备的定时策略刚好错开,导致保活失败。建议客户端设 30,服务端设 45,留出错峰缓冲。











