查端口被占用是解决VSCode Remote-SSH“Connection reset”错误的最快方法:先用sudo netstat -tulpn | grep :22或sudo lsof -i :22定位非sshd进程,kill -9其PID后执行sudo systemctl restart ssh,再验证sshd已active监听*:22,VSCode即可立即重连。

VSCode 远程连接报 “Connection reset” 错误,90% 以上不是网络或代理问题,而是 SSH 端口被意外占用或服务异常 —— 直接查端口、杀进程、重启 sshd,比改配置、删缓存快得多。
检查 22 端口是否被其他进程占用
VSCode 的 Remote-SSH 插件底层依赖系统 ssh 命令发起连接,一旦远程服务器的 22 端口被非 sshd 进程霸占,就会在密钥交换阶段直接触发 kex_exchange_identification: read: Connection reset。这不是 VSCode 的错,是 sshd 根本没起来。
- 登录服务器终端,执行:
sudo netstat -tulpn | grep :22或sudo lsof -i :22 - 若输出中
LISTEN行的PID/Program name不是sshd(比如是1993/python或xxx/node),说明端口被抢 - 记下 PID,执行:
sudo kill -9 <PID>
重启 sshd 服务并确认状态
杀掉占端口的进程后,sshd 往往仍处于 failed 状态(因为启动时检测到端口不可用而退出),必须手动重启才能恢复监听。
- 执行:
sudo systemctl restart ssh(Ubuntu/Debian)或sudo systemctl restart sshd(CentOS/RHEL) - 立即验证:
sudo systemctl status ssh,确保输出含active (running)且无failed字样 - 再补一枪:
sudo ss -tlnp | grep :22,确认sshd已绑定*:22
VSCode 侧无需重装插件或删 ~/.vscode-server
只要服务器端 sshd 恢复正常,VSCode 就能立刻重连成功 —— 因为它不缓存 SSH 层连接,只依赖系统 ssh 命令。那些“删缓存”“重装 Remote-SSH”的操作,在端口冲突场景下纯属浪费时间。
- 本地不用换 Git 自带 SSH,也不用改
known_hosts,更不用动 VSCode 的http.proxy - 如果之前连过但中途断开,只需在 VSCode 中点击右下角 “Remote Explorer” → “Reconnect to Host”,无需重启 VSCode
- 唯一要等的是
~/.vscode-server首次下载(仅首次或版本升级时发生),这和Connection reset无关
避免下次再被占端口的实操建议
很多开发机上跑着 Jupyter、FastAPI、WebDAV 等服务,默认监听 0.0.0.0:22,极易误占 SSH 端口。最稳妥的做法是让它们避开敏感端口。
- Jupyter:启动时加参数
--ip=127.0.0.1 --port=8888,禁止监听所有接口 - Node/Python 服务:显式指定
host='127.0.0.1',而非'0.0.0.0' - 长期方案:在
/etc/ssh/sshd_config加一行Port 2222,再用sudo ufw allow 2222开放新端口,然后在 VSCode 的~/.ssh/config中对应 Host 下写Port 2222
真正卡住 VSCode 连接的,从来不是 VSCode 本身,而是那个没人管的 22 端口 —— 它安静地被某个后台脚本占着,又不让 sshd 启动,还拒绝任何连接请求。查端口比猜配置快十倍。


















