“host key verification failed”是ssh客户端因known_hosts中公钥不匹配而拒绝连接,并非vscode bug;vscode remote-ssh在非交互模式下不提示确认,需手动用ssh-keygen -r清除旧记录或检查文件权限与格式。

“Host key verification failed” 不是 VSCode 的 bug,而是 SSH 客户端在拒绝连接——它发现远程服务器的公钥和你本地 ~/.ssh/known_hosts 里存的不一致,出于安全默认中断连接。
为什么终端 ssh 能连、VSCode 却报这个错?
终端里你可能手动输入了 yes 接受新密钥,但 VSCode 的 Remote-SSH 扩展运行在非交互模式下,不会弹出确认提示,直接失败。它严格依赖 known_hosts 文件里的记录,且不走用户 shell 的交互流程。
- 常见触发场景:服务器重装系统、云主机重建、运维批量更换密钥、多人共用同一 IP
- 注意:不要跳过验证直接删记录——先确认这台服务器确实是你要连的那个,不是中间人伪装的
- VSCode 不会复用你在终端里按过
yes的那次信任结果;它每次连接都独立查known_hosts
清除指定主机的旧密钥记录(最常用)
用 ssh-keygen -R 精准删除,避免误删其他条目:
- 如果知道 IP:
ssh-keygen -R 192.168.1.100 - 如果用了 Host 别名(比如 config 里写了
Host myserver):ssh-keygen -R myserver - Windows 用户注意路径:
ssh-keygen -R 192.168.1.100 -f "$env:USERPROFILE\.ssh\known_hosts"
执行后,下次 VSCode 连接会自动重新协商并保存新密钥——前提是服务器确实换了密钥,且你确认这是预期行为。
临时禁用主机密钥检查(仅调试用)
不推荐长期使用,但可快速验证是否真由密钥问题导致失败:
- 在
~/.ssh/config对应Host块里加一行:StrictHostKeyChecking no - 再加一行:
UserKnownHostsFile /dev/null(避免写入空记录干扰后续测试) - ⚠️ 这等于关闭 SSH 的防中间人攻击能力,切勿用于生产环境或不可信网络
改完记得重启 VSCode 或执行 Remote-SSH: Kill VS Code Server on Host 清掉缓存进程,否则旧连接状态可能延续。
检查 known_hosts 权限与格式
权限不对或文件损坏也会让 SSH 拒绝读取,导致 fallback 到“未见过主机”逻辑:
- 运行
ls -l ~/.ssh/known_hosts,确保权限是-rw-r--r--(644)或更严格(如 600);若显示----------或权限过大(如 777),执行chmod 644 ~/.ssh/known_hosts - 打开文件,确认没有乱码、BOM 头、中文冒号或意外换行;每行应为
[host] [keytype] [base64]格式 - 若怀疑文件损坏,可备份后清空:
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak && > ~/.ssh/known_hosts
这个错误表面看是“验证失败”,实际常卡在文件不可读、路径不存在或扩展无法访问的环节——所以别只盯着密钥本身,先让 SSH 能正常加载 known_hosts。











