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

检查远程主机发送的 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 来获取指纹是为了什么,我该如何检查它?

答案1

公钥指纹不是 IP 地址字符串的简单哈希值。

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

最后,您可以将文件中的当前指纹known_hosts与进行比较ssh-keygen -l -F <domain_or_IP_address>

答案2

更详细一点:因为警告信息指的是椭圆曲线数字图像分析远程主机发送的密钥,我们收集有关主机的公钥(ECDSA)的信息:

ssh-keyscan -t ecdsa <IP_address_or_hostname> ECDSA_file_to_compare

然后我们就可以找出我们的已知主机文件中的公钥(ECDSA)为:

ssh-keygen -l -F ipofhost

如果我们想比较指纹,我们必须把指纹放在我们的已知主机文件(仅与此主机相关的条目)。我们可以将其称为 ecdsa_file_from_known_hosts,然后对其进行以下比较:

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

并检查它们是否显示相同的哈希值。

当然它们不匹配,这就是我收到警告消息的原因(ssh内部检查此匹配)。如果我们确定 IP 地址发生变化(因此我们不会遭受中间人攻击),我们可以删除我们已知主机文件,下次我们ssh进入该文件时,一个新的条目将被添加到该文件中。

相关内容