解决 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教程一起参考。