WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

昨天把德州那台VPS的系统重装了一下,然后再SSH连接的时候就收到一个大大的警告消息

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
8a:c7:45:20:5a:b5:6d:f0:1b:7d:07:59:9d:fd:f8:be.
Please contact your system administrator.
Add correct host key in /home/rek/.ssh/known_hosts to get rid of this message.
Offending key in /home/rek/.ssh/known_hosts:33
RSA host key for rek.tw has changed and you have requested strict checking.
Host key verification failed.

这自然是由于重装之后SSH服务器的密钥改变导致的,上网搜了一下,发现有无数帖子介绍用移除~/.ssh/known_hosts的方法解决。但是这种方法会失去所有的本地密钥缓存,以后我要连接其它几十台不同的服务器时都会蹦出密钥信息提示。这样一来麻烦,二来也不怎么安全,比如我的域名被劫持就是通过SSH密钥安全警告发现的,如果没有警告,可能我已经泄漏了主机密码。

查了一下ssh相关的命令,发现ssh-keygen有个-R选项可以删除单个主机的密钥缓存,于是试用了一下。

rek@rek-desktop:~$ ssh-keygen -R rek.tw
/home/rek/.ssh/known_hosts updated.
Original contents retained as /home/rek/.ssh/known_hosts.old

再次尝试ssh连接服务器,就不会看到上面那个巨大的警告了,而是提示是否将rek.tw的密钥保存到known_hosts中。

Continue Reading