Host key verification failed是OpenSSH因远程主机公钥与本地known_hosts不一致而拒绝连接,常见于服务器重装、IP复用等场景;应使用ssh-keygen -R 清理对应密钥,或检查ProxyJump路径、VSCode缓存及WSL/Windows known_hosts位置。

为什么Remote-SSH会报Host key verification failed
这个错误不是VSCode的问题,而是OpenSSH在连接时发现远程主机的公钥和本地~/.ssh/known_hosts里存的不一致。常见于:服务器重装系统、IP复用旧机器、启用新SSH服务端配置(比如换了sshd_config里的HostKey路径),或者你之前连过另一台同名主机。
OpenSSH出于安全默认拒绝这种“密钥突变”,防止中间人攻击——所以它宁可断连,也不自动覆盖。
快速清理旧密钥的两种方式
手动删对应行最直接,也最可控:
- 打开终端,运行:
ssh-keygen -R <hostname></hostname>
(把<hostname></hostname>换成你配置里写的主机名或IP,比如ssh-keygen -R 192.168.1.100) - 或者直接编辑
~/.ssh/known_hosts,找到含该主机的那一行删掉(注意:一行可能对应多个主机,用空格分隔,别误删其他)
别用ssh-keygen -R *清空全部——万一你连过几十台生产机,全删了下次连都得重新确认,反而更麻烦。
连接时跳过验证?不推荐但有时真需要
仅限测试环境或内网可信网络,且你明确知道目标主机没被篡改:
- 在VSCode的Remote-SSH配置中,给对应主机加字段:
"configFile": "/path/to/custom_ssh_config"
- 然后在
/path/to/custom_ssh_config里写:Host myserver HostName 192.168.1.100 User myuser StrictHostKeyChecking no UserKnownHostsFile /dev/null
- 注意:
StrictHostKeyChecking no必须配合UserKnownHostsFile /dev/null,否则SSH仍会读默认known_hosts并报错
这个组合等于彻底放弃密钥校验,生产环境禁用。
为什么改了known_hosts还是报错
常见干扰项:
- VSCode Remote-SSH插件缓存了旧连接状态:关掉VSCode,再删
~/.vscode-server(或~/.vscode-remote)下的缓存目录(不影响你本地配置,只清远程代理状态) - 连接用了跳转主机(ProxyJump),实际校验的是跳板机的密钥,不是最终目标机——要删的是跳板机那行,不是目标机
- Windows用户用WSL,要注意
~/.ssh/known_hosts可能在WSL里,也可能在Windows的%USERPROFILE%.ssh\known_hosts,VSCode用哪个取决于你启动方式(从Windows GUI点开?还是从WSL终端里code .?)
密钥验证失败本身不难修,难的是搞清“到底在验证谁的密钥”。先确认连接路径,再定位known_hosts位置,比盲目删文件靠谱得多。











