检查远程主机发送的ECDSA密钥的指纹

在尝试SSH到服务器时,我已经得到了众所周知的警告消息:

$ ssh whateverhost @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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 a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx. Please contact your system administrator. Add correct host key in /home/user/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/user/.ssh/known_hosts:10 ECDSA host key for ipofmyhost has changed and you have requested strict checking. Host key verification failed. 

而我知道为什么,因为我改变了这样的服务器的IP地址。 但是如果不是这样,我怎么能检查远程主机发送的ECDSA密钥的指纹?

我曾试图这样做:

 echo -n ipofthehost | sha256sum 

但是我没有得到相同的指纹。 我也试过“主机名,IP”类似于aws,但我没有匹配。

如果我从我的known_hosts文件中删除入口,然后再次尝试ssh,它会成功并告知以下内容:

 ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx. Are you sure you want to continue connecting (yes/no)? 

那么到底什么是应用sha256sum来获取指纹,以及如何检查呢?

公钥指纹不是IPstring的简单哈希。

要检索远程主机公共密钥,您可以使用ssh-keyscan <IP>那么您可以使用常用工具来提取其指纹( ssh-keygen -lf <public_key_file> )。

最后,您可以使用ssh-keygen -l -F <domain_or_ip>known_hosts文件中的当前指纹进行比较。

详细一点 :由于警告消息是指由远程主机发送的ECDSA密钥的指纹,因此我们收集有关主机公共(ecdsa)密钥的信息:

 ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare 

然后我们可以在我们的known_hosts文件中findpublic(ecdsa)键是:

 ssh-keygen -l -F ipofhost 

如果我们想比较指纹,我们必须把我们的known_hosts文件的内容(只是与这个主机相关的条目),我们可以称之为ecdsa_file_from_known_hosts,然后比较它们如下:

 ssh-keygen -lf ecdsa_file_to_compare ssh-keygen -lf ecdsa_file_from_known_hosts 

并检查是否显示相同的散列。

当然,他们不匹配,这就是为什么我得到了警告消息(ssh检查内部匹配)。 如果我们确信ip更改(所以我们不会遭受中间人攻击),我们可以删除我们的known_hosts文件中的主机条目,并在下一次我们ssh进入一个新的条目它会被添加到这样的文件。