问题描述 {#问题描述}
使用SSH连接服务器时出现以下的警告信息:
|---------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13
| @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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 d0:00:7c:bc:88:5c:dc:de:89:61:44:30:00:60:f9:b2. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:1 RSA host key for 192.168.2.1 has changed and you have requested strict checking. Host key verification failed.
|
问题原因 {#问题原因}
|-----------|--------------------------------------------------------------------------|
| 1
| It is also possible that the RSA host key has just been changed.
|
可能由于主机的SSH公钥改变了,导致公钥认证失败,比如系统重新装机等情况可能导致出现这样的情况。
SSH或Secure Shell,是一种通常通过命令行安全访问远程计算机的非常常用的方法。它旨在确保连接以及所有传递的数据都不会被窃听。为了达到这个目的,常见的SSH客户端(例如OpenSSH)内置了许多检查,以确保我们发起的连接的安全性不会受到损害。
上面的警告会在服务器的指纹被更改后显示出来。
当我们通过SSH连接到服务器时,ssh将获得ECDSA密钥的指纹,然后将其保存到~/.ssh/known_hosts
下的主目录中。这是在首次连接到服务器后完成的,并且将通过以下的消息提示需要进行确认:
|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4
| $ ssh 192.168.2.1 The authenticity of host '192.168.2.1' can't be established. ECDSA key fingerprint is SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I. Are you sure you want to continue connecting (yes/no)?
|
如果我们这时候输入"yes",指纹将会保存到known_hosts文件,之后每次连接到该服务器时,SSH都会查询该文件。
如果自上次连接服务器以来,服务器的ECDSA密钥被更改了,会发生什么情况呢?服务器密钥发生变化是一种值得警惕的事件,因为这实际上可能意味着我们在不知情下正在连接到另一台服务器。如果这台新服务器是恶意的,则它将能够查看所有连接中发送和收到的的数据,任何拥有这台服务器的人都可以看到这些数据。这很可能是一种中间人攻击。因此SSH就会提示出上面的那个警告,告诉我们服务器的密钥与之前储存的不同。
当然,出现这个情况并非一定意味着我们被黑客攻击了,ECDSA密钥指纹更改服务器的原因很多。例如:连接到的IP地址和主机名相同,但是底层服务器不同,这也使得SSH客户端发出这个警告。
解决办法(一) {#解决办法(一)}
通过 ssh-keygen 密钥工具更新
ssh-keygen -f ~/.ssh/known_hosts -R 192.168.2.1
|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4
| $ ssh-keygen -f ~/.ssh/known_hosts -R 192.168.2.1 # Host 192.168.2.1 found: line 9 /zsyyblog/.ssh/known_hosts updated. Original contents retained as /zsyyblog/.ssh/known_hosts.old
|
解决方式(二) {#解决方式(二)}
以编辑器的方式进入known_hosts
这个文件,手动删除之前获取的ssh公钥信息,重新连接来建立新的连接,获取新的公钥。
|-----------|-------------------------------|
| 1
| vi ~/.ssh/known_hosts
|
操作方法:
只需要打开警告消息中指定的known_hosts文件,删除警告消息中指定的行即可。
通过删除这一行,本地的SSH客户端将不再有可比较的ECDSA密钥指纹,因此将在下次连接时再次要求您验证服务器的真实性,即相当于第一次链接。完成后,您将在此服务器的known_hosts
文件中拥有一个新指纹,即服务器的当前指纹。