问题描述
在使用 VSCode 通过 SSH 连接远程服务器时,我们可能会遇到类似如下的错误日志:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Offending ED25519 key in C:\Users\DELL/.ssh/known_hosts:15
Host key for [172.20.2.3]:36301 has changed and you have requested strict checking.
Host key verification failed.
最近,我由于服务器重装,导致了远程服务器的主机密钥(Host Key)发生了变化。当使用 VSCode 的 Remote-SSH 插件连接服务器时,SSH 客户端会在本地 known_hosts 文件中查找对应的旧密钥(本例中位置为 C:\Users\DELL.ssh\known_hosts 的第15行)。由于该密钥与服务器现在提供的密钥不一致,SSH 就会报出 Remote Host Identification Has Changed 的错误。
这一机制是 SSH 为了保证连接安全的一种手段,它可以防止中间人攻击。但在服务器重新安装、更新或更换密钥的情况下,这就导致了连接失败。
解决方案
针对这个问题,我们需要手动或自动从 known_hosts 文件中移除旧的主机密钥记录,让 SSH 在下次连接时自动添加新的密钥。以下是详细的步骤:
1. 确认服务器重装无误
首先确认服务器确实是重装了,而非遭到恶意攻击。如果确认服务器是正规重装,便可以放心更新主机密钥。
2. 移除旧的主机密钥
有两种方法可以移除旧的主机密钥记录:
方法一:使用 ssh-keygen 命令
打开命令行窗口,输入以下命令来移除旧的记录:
ssh-keygen -R "[172.20.2.3]:36301"
该命令会自动从 C:\Users\DELL.ssh\known_hosts 文件中删除与 [172.20.2.3]:36301 相关的旧密钥记录。
方法二:手动编辑 known_hosts 文件
如果你更倾向于手动操作,可以使用文本编辑器打开 C:\Users\DELL.ssh\known_hosts 文件,找到第15行(错误日志中提到)对应的密钥,并将其删除。保存文件后,再次尝试连接。
3. 重新连接服务器
删除旧密钥后,重新使用 VSCode 连接远程服务器。当 SSH 连接时,会提示是否接受新的主机密钥,输入 “yes” 接受即可。此时新的主机密钥会自动写入 known_hosts 文件中,后续的连接就不会再报错了。
4. 验证连接是否成功
完成上述步骤后,请检查 VSCode 的 SSH 插件日志,确认连接不再报上述错误信息。如果连接正常,即表示问题已经解决。
总结
服务器重新安装后,主机密钥发生变化,这是导致 VSCode 连接失败的主要原因。通过以下几个步骤,我们可以简单地解决该问题:
- 确认服务器重装无误:确保是合法重装,而非攻击风险。
- 移除旧密钥记录:使用 ssh-keygen -R “[172.20.2.3]:36301” 命令或手动编辑 known_hosts 文件。
- 重新连接:接受新的主机密钥,连接成功后验证。