remote-ssh 卡在“host key verification failed”是因 openssh 安全机制检测到目标主机公钥与本地 known_hosts 不一致,常见于服务器重装、ip 复用或中间人劫持;解决方法包括临时禁用校验(仅限可信内网)、清理旧记录后重连,或用 ssh-keyscan 手动更新公钥,windows+wsl 用户需确保使用 wsl 的 ~/.ssh/ 配置并修复换行符。

为什么 Remote-SSH 会卡在 “Host key verification failed”
这不是 VSCode 或 SSH 客户端的 bug,而是 OpenSSH 的安全机制在起作用:当目标主机的公钥指纹和本地 ~/.ssh/known_hosts 文件里存的不一致时,SSH 就会拒绝连接并报这个错。常见于服务器重装系统、IP 复用旧主机、或有人在中间劫持(虽然概率低,但机制必须存在)。
快速绕过验证(仅限可信内网环境)
如果你确认目标机器是自己可控的(比如公司内网测试机、本地虚拟机),最直接的办法是让 SSH 跳过 host key 检查——但注意,这会削弱安全性,别在公网服务器上这么干。
- 在 VSCode 的 Remote-SSH 连接配置中,为该 Host 添加配置项:
StrictHostKeyChecking no
- 或者,在本地终端执行:
ssh -o StrictHostKeyChecking=no user@host
,首次连接成功后,新公钥会自动写入~/.ssh/known_hosts,后续 VSCode 连接就不再报错 - 也可以临时清空对应条目:
ssh-keygen -R hostname_or_ip
,再连一次触发重新记录
正确更新 known_hosts(推荐长期方案)
更稳妥的做法是手动确认并更新密钥,既保安全又一劳永逸。关键不是删掉整行,而是精准替换。
- 先用
ssh-keyscan获取当前服务器真实公钥:ssh-keyscan -t rsa hostname_or_ip >> ~/.ssh/known_hosts
(如果提示重复,先用ssh-keygen -R清除旧条目) - 若服务器只支持 ed25519,把
-t rsa换成-t ed25519 - VSCode Remote-SSH 默认读取
~/.ssh/config和~/.ssh/known_hosts,确保路径没错(Windows 用户注意:WSL 下是/home/username/.ssh/,PowerShell 下可能是$env:USERPROFILE\.ssh\) - 改完后重启 VSCode,或点击左下角远程连接图标 → “Remote-SSH: Kill VS Code Server on Host…” 再重连
Windows + WSL 用户特别注意的坑
VSCode 在 Windows 上通过 WSL 启动 Remote-SSH 时,容易混用两套 SSH 配置:一套是 Windows 的 %USERPROFILE%\.ssh\,一套是 WSL 里的 ~/.ssh/。VSCode 实际调用的是 WSL 环境下的 ssh 命令,所以它只认 WSL 的 known_hosts。
- 检查你用的是哪个 shell:在 VSCode 终端里运行
which ssh,如果是/usr/bin/ssh,那就是 WSL 的;如果是C:\Windows\System32\OpenSSH\ssh.exe,说明配置有误 - 不要直接复制 Windows 的
known_hosts到 WSL,因为 Windows 行尾是\r\n,WSL 的ssh会解析失败,报错可能不明确 - 稳妥做法:在 WSL 终端里用
ssh-keyscan重新生成,或用dos2unix ~/.ssh/known_hosts修复换行符
~/.ssh/known_hosts 其实可能有三份,而只有被实际调用的 ssh 程序看到的那一份才有效。











