当你在使用SSH连接远程服务器时,如果遇到提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”,这意味着SSH客户端检测到远程主机的公钥与之前记录在本地的公钥不匹配。这种情况通常发生在以下几种情形:
- 远程服务器的SSH密钥发生了变化,可能是因为服务器重装、SSH配置改动或安全更新。
- 本地的SSH已知主机密钥缓存文件(通常位于
~/.ssh/known_hosts)中的条目与实际情况不符,可能是由于误删或损坏。 - 中间人攻击(虽然非常罕见,但也是一种可能性)。

解决这个问题的步骤如下:
1. 确认原因
首先,你应该确认这个警告出现的原因,是否是因为预期的更改(如服务器维护)或意外情况。如果是因为服务器端的预期变动,比如系统重装,那么按照接下来的步骤进行修复是安全的。若怀疑存在安全问题,请联系服务器管理员进一步核实。
2. 手动删除不匹配的条目
-
定位条目:首先,通过错误消息中给出的提示,找到不匹配的条目所在的行。错误信息通常会包含类似
[hostname]:[port]:的标识符,帮助你定位到具体的条目。 -
编辑known_hosts文件:打开终端,使用文本编辑器(如
nano或vim)编辑~/.ssh/known_hosts文件。例如,使用vim ~/.ssh/known_hosts命令。 -
查找并删除条目:在编辑器中,找到对应于错误提示中的条目,然后删除整行。如果你不确定哪一行,可以搜索远程主机的IP地址或域名。
-
保存并退出:保存文件更改并退出编辑器。如果是使用
vim,可以按Esc键,然后输入:wq并回车。
3. 重新尝试SSH连接
删除不匹配的条目后,重新尝试SSH连接到远程服务器。这次应该不会再出现警告信息,因为SSH客户端会重新记录远程主机的公钥到known_hosts文件中。
4. 验证主机指纹(可选但推荐)
出于安全考虑,可以事先与服务器管理员确认新的主机指纹,然后在首次连接时验证SSH提供的指纹信息是否一致。执行如下命令来查看远程主机的指纹:
ssh-keyscan -t rsa [remote_host] >> ~/.ssh/known_hosts
或指定端口和协议类型:
ssh-keyscan -t rsa -p [port_number] [remote_host] >> ~/.ssh/known_hosts
然后手动比对显示的指纹信息与管理员提供的是否一致。
5. 自动处理(谨慎使用)
在某些情况下,你可能希望自动化处理这个过程,但这样做有安全风险,因为它可能会在不验证的情况下覆盖已知主机信息。如果你确定这是合理的操作,可以使用如下命令:
ssh-keygen -R [hostname]
这条命令会从known_hosts文件中移除与指定主机名匹配的所有条目。
总结
遇到“REMOTE HOST IDENTIFICATION HAS CHANGED”警告时,重要的是要谨慎处理,确保操作基于正确的判断。遵循上述步骤,可以安全地解决这一问题,同时保持系统的安全性。始终记得,安全是第一位的,尤其是在处理网络连接和认证信息时。


