根本原因是服务器端sshd空闲超时或防火墙/nat丢弃连接,需两端配合:服务端启用clientaliveinterval 60和clientalivecountmax 3并重启sshd,客户端检查~/.ssh/config避免冲突,同时清理vscode残留进程并更新扩展。

SSH连接被服务器主动断开(Connection closed by remote host)
这是最常见的情况:VSCode Remote-SSH 插件显示“Disconnected from server”,终端里提示 Connection closed by remote host。根本原因通常是服务器端的 SSH 守护进程(sshd)设置了空闲超时,比如 ClientAliveInterval 和 ClientAliveCountMax 默认值偏低,或防火墙/NAT 设备在连接空闲一段时间后直接丢弃 TCP 连接。
解决思路不是只改客户端,得两端配合:
- 在服务器上编辑
/etc/ssh/sshd_config,确保有这两行(取消注释并调整):ClientAliveInterval 60<br>ClientAliveCountMax 3
这表示每 60 秒发一次保活包,连续 3 次无响应才断连(即总空闲容忍约 3 分钟) - 重启服务:
sudo systemctl restart sshd(Linux)或sudo launchctl kickstart -k system/com.openssh.sshd(macOS) - 客户端无需改 VSCode 设置,但可检查本地
~/.ssh/config是否意外覆盖了ServerAliveInterval—— 如果有,建议删掉或设为60,避免和服务器端冲突
VSCode Remote-SSH 不自动重连(显示“Reconnect”按钮但不触发)
点击“Reconnect”没反应,或弹出窗口后卡住,大概率是 VSCode 的 Remote-SSH 扩展缓存了旧的连接状态,或底层 SSH 进程僵死。它不会像普通终端那样自动重试,必须显式干预。
实操建议优先做这几件事:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并运行Remote-SSH: Kill VS Code Server on Host...,选对应主机——这能清理服务器上残留的vscode-server进程和临时目录 - 关闭当前窗口,**不要点“Keep Window”**,而是彻底退出 VSCode,再重新打开并用 Remote-SSH 连接
- 确认 Remote-SSH 扩展已更新到最新版(v0.107.0+),旧版本在某些 Linux 发行版(如 CentOS 7)上对
glibc版本敏感,会导致重连时静默失败
远程开发环境启动慢 / 卡在“Setting up SSH Host”
这不是连接断开,但会让人误以为连不上。典型表现是 VSCode 状态栏长时间显示“Setting up SSH Host”,鼠标悬停提示“Installing VS Code Server…”且进度不动。本质是下载或解压 vscode-server 失败,常因网络策略或磁盘权限导致。
关键排查点:
- 手动检查服务器上目标目录权限:
~/.vscode-server必须属当前用户且不可被组/其他写入(chmod 755 ~/.vscode-server);若之前用sudo运行过,该目录可能属 root,VSCode 后续无法写入 - 如果公司网络屏蔽 GitHub 或限制 TLS SNI,VSCode 默认从
update.code.visualstudio.com下载 server,可改用离线方式:先在能联网的机器下载对应平台的vscode-server-linux-x64.tar.gz,再用scp传到服务器~/.vscode-server/bin/下对应 commit ID 目录中 - 禁用扩展同步(
"remote.extensionKind": {"ms-vscode.vscode-typescript-next": ["ui"]}这类配置可能干扰初始化)—— 临时在连接前加"disableExtensions": true到~/.ssh/config的对应 Host 块里测试
如何让 VSCode 在断连后真正“自动”恢复工作区
VSCode Remote-SSH 本身不支持后台自动重连(出于安全和资源控制考虑),所谓“自动”只能靠折中方案:保留上下文 + 最小化人工操作。
实用组合策略:
- 启用
remote.restoreEditorsOnRestart(设置为true):断连后重启连接时,自动恢复上次打开的文件和编辑位置 - 把常用终端命令写进
~/.bashrc或~/.zshrc,并确保shellIntegration.enabled开启——这样重连后终端能快速复原 shell 状态,不用反复cd和source - 避免依赖“远程窗口一直开着”的工作流:比如长期运行的
npm run dev,改用tmux或screen启动,断连不影响后台进程,重连后tmux attach即可
真正麻烦的是那些需要持续 TCP 连接的服务(如数据库端口转发、Docker 守护进程监听),它们不会随 VSCode 重连自动恢复——这部分必须单独设计保活逻辑,不能指望 Remote-SSH 解决。











