VSCode报“Host key verification failed”是OpenSSH因本地known_hosts中公钥与服务器当前公钥不一致而拒绝连接,常见于服务器重装、IP复用或中间人攻击;首选安全方案是精准执行ssh-keygen -R hostname_or_ip清理对应记录,再确认VSCode实际读取的known_hosts路径(Windows GUI/WLS/macOS/Linux各不同),并清除VSCode Server缓存。

VSCode 连服务器报 Host key verification failed,不是 VSCode 本身出错,而是它调用的 OpenSSH 拒绝了连接——因为本地 ~/.ssh/known_hosts 里存的公钥和当前服务器发来的不一致。这通常意味着服务器密钥变了(比如重装系统、换虚拟机),也可能是中间人攻击信号。别急着跳过验证,先确认变更是否可信。
怎么快速删掉旧的 host key 记录
最常用、最安全的第一步就是精准清理对应主机的记录,而不是清空整个 known_hosts:
- 在终端运行
ssh-keygen -R hostname_or_ip,例如ssh-keygen -R 192.168.1.100或ssh-keygen -R myserver.local - 如果用了非标准端口(比如
2222),要带端口号:ssh-keygen -R [192.168.1.100]:2222(注意方括号) - Windows PowerShell 用户需显式指定路径:
ssh-keygen -R 192.168.1.100 -f $env:USERPROFILE\.ssh\known_hosts - 执行后会提示类似
# Host 192.168.1.100 found: line 42和known_hosts updated.,说明删除成功
为什么删了还是连不上?检查 VSCode 实际读的是哪个 known_hosts
VSCode Remote-SSH 插件调用的是底层 SSH 命令,它读哪个 known_hosts,取决于你启动 VSCode 的方式和环境:
- 从 Windows GUI 启动 VSCode → 默认读
%USERPROFILE%\.ssh\known_hosts - 从 WSL 终端执行
code .启动 → 实际走 WSL 的~/.ssh/known_hosts,和 Windows 的完全隔离 - macOS / Linux 用户统一读
~/.ssh/known_hosts - 如果你改了
~/.ssh/config里的UserKnownHostsFile,那就要去对应路径找
常见坑:你在 PowerShell 里删了 Windows 的 known_hosts,但 VSCode 其实是从 WSL 调用 ssh,结果还是报错。
StrictHostKeyChecking no 能不能用?什么场景下真得禁用
可以临时用,但必须满足两个前提:你**完全控制目标机器**,且它**只在可信内网运行**(比如本地虚拟机、公司测试服务器)。公网或生产环境禁用等于裸奔:
- 在 VSCode 的 Remote-SSH 配置中,为该 Host 添加字段:
"configFile": "/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并报错 - 首次连接成功后,新密钥会自动写入
/dev/null(即丢弃),下次再连依然跳过校验
VSCode 自身缓存也要清,尤其 Windows + WSL 组合
即使 known_hosts 更新了,VSCode Remote-SSH 插件可能还缓着旧的连接状态或远程服务端二进制文件:
- 关掉所有 VSCode 窗口
- 删除远程服务器上的 VSCode Server 缓存目录:
rm -rf ~/.vscode-server(Linux/macOS)或rm -rf %USERPROFILE%\AppData\Roaming\Code\Remote\ssh(Windows) - 如果是 WSL 下连接远程 Linux,还要确认 WSL 里没有残留的
~/.vscode-server(它和 Windows 的不互通) - 重启 VSCode,再选 “Remote-SSH: Connect to Host”
真正容易被忽略的是:WSL 和 Windows 的 SSH 配置、VSCode Server 缓存、甚至终端启动方式三者混用时,你以为清了 A,实际生效的是 B —— 动手前先确认 VSCode 底层调用的是哪套环境。


















