解决 SSH 远程主机身份验证更改报错

VPS重装完系统,兴冲冲敲下ssh root@IP想连上去看看,结果屏幕突然弹出一大段红色警告,中间还有"IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY"这种吓人的话,第一次遇到这个多半会愣一下,以为自己的VPS被人攻击了。

其实大部分情况下不用慌——这是SSH的正常安全机制在起作用,不是真的出了安全事故。

为什么会报这个警告

SSH第一次连接一台服务器时,会把这台服务器的"公钥指纹"记录在本地的 ~/.ssh/known_hosts 文件里,相当于给这台服务器留了个"身份证号"。以后每次连接,SSH都会核对一下这个指纹对不对,对不上就会拒绝连接并弹出这个警告,防止你连接到了一台冒充的服务器(中间人攻击)。

但这个机制有个副作用——只要服务器的SSH密钥变了,哪怕是你自己合法操作导致的,也会触发同样的警告。最常见的合法原因是:

  • 重装了系统(比如用DD方式换了系统),系统重装后SSH服务的密钥是全新生成的,跟之前记录的对不上
  • 重新生成过SSH主机密钥(不太常见的手动操作)
  • 服务商更换了这台VPS的底层物理机(少数情况)

解决方法

确认是自己主动重装/换过系统导致的,直接清除本地这台服务器的旧记录就行:

1
ssh-keygen -R 服务器的IP地址

例如:

1
ssh-keygen -R 1.2.3.4

执行后再重新连接,SSH会当作第一次连接,重新记录新的密钥指纹,正常输入 yes 确认即可。

需要留个心眼的情况

这个警告机制存在的意义就是防范安全风险,不建议看到警告就无脑清除记录。如果符合下面任何一种情况,先别急着执行上面的命令:

  • 最近没有主动重装过这台VPS的系统
  • 是在公共WiFi、公司网络等不完全信任的网络环境下连接
  • IP地址是新买的、之前从没连接成功过就报了这个警告(可能是IP被复用过,之前的租户留下了旧记录)

遇到这几种情况,建议先联系VPS服务商客服确认一下这台机器最近有没有做过重装或者迁移操作,确认无误再清除记录,避免真的连到了假冒的服务器上。

相关操作

如果这个警告是因为用DD方式重装系统触发的,具体的DD重装命令可以参考dd命令大集合这篇;如果平时习惯用手机Termux连接VPS,遇到这个警告时的处理方式完全一样,可以配合Termux手机管理VPS教程一起参考。