vscode remote-ssh 频繁断连的根本原因是 ssh 客户端未启用保活机制且服务端主动断开空闲连接;需在本地 ~/.ssh/config 中配置 serveraliveinterval 60 和 serveralivecountmax 3,并视情况调整远程 sshd 的 clientaliveinterval 与 clientalivecountmax。

VSCode 远程开发(SSH)长连接断开,根本原因通常是 SSH 客户端默认的连接保活机制未启用,或服务端主动踢掉空闲连接。
为什么 VSCode 的 Remote-SSH 会频繁断连
VSCode 本身不管理底层 SSH 连接生命周期,它完全依赖本地 ssh 命令建立和维持连接。而 OpenSSH 默认配置中:ServerAliveInterval 和 ServerAliveCountMax 都未设置,导致客户端在无流量时不会主动发心跳;同时很多服务器(尤其是 Linux 发行版默认的 sshd)设置了 ClientAliveInterval 600 和 ClientAliveCountMax 3,即 1800 秒(30 分钟)无响应就断开——这正是你凌晨写完代码、早上回来发现连接已失的原因。
常见现象包括:Failed to fetch remote environment、Waiting for server log... 卡住、终端突然显示 Connection closed by XXX port 22。
在本地 SSH 配置中启用保活(推荐)
修改本地 ~/.ssh/config,为你的远程主机添加保活参数:
Host my-remote-server
HostName 192.168.1.100
User ubuntu
ServerAliveInterval 60
ServerAliveCountMax 3
TCPKeepAlive yes
说明:
-
ServerAliveInterval 60:每 60 秒向服务端发一次空包(心跳),防止中间 NAT/防火墙超时 -
ServerAliveCountMax 3:连续 3 次心跳失败才断开连接(即最多容忍 3 分钟不可达) -
TCPKeepAlive yes:启用底层 TCP keepalive(部分老旧网络设备需要) - 务必确保
Host名与 VSCode Remote-SSH 选择的目标一致(不是 IP,而是 config 中定义的别名)
检查并调整远程服务器的 sshd 配置(可选但重要)
如果无法控制本地环境(如公司统一镜像),或上述配置仍无效,需确认远程服务器是否强制限制了连接时长:
- 登录服务器,检查
/etc/ssh/sshd_config中是否有:ClientAliveInterval和ClientAliveCountMax - 若值过小(如
ClientAliveInterval 300),建议调大到600,并设ClientAliveCountMax 5 - 修改后必须执行
sudo systemctl restart sshd(或sudo service ssh restart)生效 - 注意:某些云厂商(如 AWS EC2)默认禁用
ClientAlive,此时仅靠客户端保活即可,无需改服务端
VSCode Remote-SSH 插件本身的缓存与重连行为
VSCode Remote-SSH 并不支持“后台持续保活”,它会在窗口关闭、或长时间无操作后释放资源。关键点:
- 只要 SSH 连接本身没断(即
ssh my-remote-server命令能立刻连上),VSCode 再次打开文件夹时会秒级重连 - 不要依赖「保持窗口打开」来维持连接——它不阻止系统休眠、网络切换或 SSH 超时
- 如果频繁遇到
Could not establish connection to XXX: Error: All configured authentication methods failed,大概率是 SSH 密钥代理失效,而非保活问题;此时应检查ssh-agent是否运行,或改用ForwardAgent yes
最易被忽略的一点:VSCode Remote-SSH 的「自动重连」只在连接已建立后才生效;它无法绕过初始 SSH 认证失败或网络层中断。保活配置必须作用于 SSH 协议栈本身,而不是 VSCode 设置里任何选项。











