检查远程主机发送的ECDSA密钥的指纹[关闭]


24

尝试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

但是我没有相同的指纹。我也尝试过像在aws中那样的“ hostname,ip”,但没有找到匹配项。

如果从我的known_hosts文件中删除该入口,然后尝试再次使用ssh,它将成功并显示以下内容:

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

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


2
没有已知的高价值,您将无法检查。仅在第一次启动SSHd时才写下来,并生成密钥,并对照该已知合理值进行检查。

我编辑了您的问题。本网站仅接受有关专业商业环境的问题。家庭网络问题不在这里,我试图通过编辑保存您的问题。目前,您有一个投票反对您的问题,以便以此为基础关闭该问题。
彼得说恢复莫妮卡

@ user186340“您仅在第一次启动SSHd时才将其写下来”似乎确实如此。如果您可以访问运行SSHd的计算机,则可以/etc/ssh/ssh_host_ecdsa_key.pub获取指纹。我已经做了。
jamadagni

Answers:


12

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

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

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


2
我很困惑,为什么通过SSH首次连接并强制使用ecdsa密钥(ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' william@my.server)时,会给我一个43位的字母数字指纹(ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.),但是当我运行时却ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub得到32个字符的十六进制?
威廉·特瑞尔

1
@WilliamTurrell之所以会发生这种情况,是因为您的服务器必须具有较旧的版本(可能是openSSH 6.8之前的版本)ssh-keygen(或者您的服务器提供者没有跟上时代的步伐,仍然仅提供md5哈希值,而不是新的SHA256)。这里列出了一些解决方法:superuser.com/questions/929566
SeldomNeedy

9

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

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

然后,我们可以找到公钥(ecdsa)在known_hosts文件中的何处:

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入该主机时,它将被添加到该文件中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.