如何在Openssh中验证主机指纹


6

当我尝试从远程计算机连接到家用计算机时,如何验证新连接的主机的指纹?第一次连接时我得到了这个:

emiter@very-far-machine.org$ ssh emiter@home-machine.org:~/
The authenticity of host '[home-machine.org]:222 ([x.xx.xx.xx]:222)' can't be established.
ECDSA key fingerprint is SHA256:6lr/VtTwgrKZVNZQ8y8Le/ilfBYfo0e+9UliSg+AD2k.
Are you sure you want to continue connecting (yes/no)? 

如何查看“家用机器”的指纹?我试图像这样在我的家用计算机上列出它们:

emiter@home-machine.org:~$ for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file};  done
1024 d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49 /etc/ssh/ssh_host_dsa_key.pub (DSA)
256 d9:25:51:16:ca:76:bd:8f:b8:6a:79:a2:1c:81:4b:4c /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
2048 3a:c6:2d:29:7c:b9:16:e8:ed:1c:a8:26:5d:ab:0d:1e /etc/ssh/ssh_host_rsa_key.pub (RSA)
emiter@home-machine.org:~$ 

但是这些密钥似乎采用了不同的格式。这是某种指纹的MD5吗?如何获得统一格式的指纹?

Answers:


4

您的ssh服务器正在提供sha256公钥哈希,这比md5哈希安全得多。

然后,您必须向ssh-keygen指定要使用sha256而不是md5哈希。尝试在家用计算机上执行命令:

for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done


1
OpenSSH应该默认为sha256。如果不是,则可能表示客户端计算机上的OpenSSH版本较旧,并且不支持sha256。因此,该-E开关极有可能没有帮助。
Martin Prikryl

没错,这应该是默认设置。但是d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49是MD5哈希。@Emiter应该升级openssh-client软件包;和最有可能的openssh-server
vera

谢谢。客户端(emiter@home-machine.org)的openssh v = 6.7p1。我将其升级到7.5p1。现在,它可以显示键的Sha256散列。似乎版本6.7p1无法显示它(没有“ -E”开关)。
Emiter

1

使用的命令

  • 显示存储在服务器上的公共主机密钥的ascii-art(要在服务器端完成,您通过ssh连接到TO)。

    ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    -l:显示指定公钥文件的指纹。

    -v:视觉(ascii-art)

    -E md5:用于计算指纹的哈希算法(“ md5”或“ sha256”)。(如果可用,则首选“ sha256”)。(在旧版本的ssh-keygen中可能不可用)

    -f:文件

  • 显示远程服务器公共主机密钥的ascii-art(要在客户端完成,您通过ssh从FROM连接的密钥):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o:选项

    visualhostkey:视觉(ascii-art)

    FingerprintHash:要使用的哈希算法(使用与从服务器获得的哈希算法相同的值:md5或sha256)

如何检查主机/服务器的真实性

首先,1.在服务器上本地完成(您要通过ssh连接TO的服务器):它将为您提供第一本ascii-art。打印或拍照。

其次,2.将在第一个SSH连接上完成;它将显示第二种ascii艺术。如果ascii艺术相同,那么您可以对“我信任吗?”回答问题(即Are you sure you want to continue connecting (yes/no))。

  • 服务器端
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6   (ECDSA)
+--[ECDSA  256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+-----------------+
  • 客户端
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)? 

一些更多的解释

第一个命令将显示与您输入的文件指纹(以及指纹本身)相对应的ascii-art。输入的文件是服务器的公共主机密钥。当客户端连接时(不仅是第一次),服务器将发送其公共主机密钥。此公共主机密钥将在以下位置搜索~/.ssh/known_hosts。如果公用密钥在文件中,则可以:主机(服务器)已知,因此我们继续下一步以验证用户身份(本文中不介绍user auth)。如果公钥不在文件中,则客户端将使用哈希算法计算此公钥的指纹(不同的哈希算法将给出不同的指纹)。显示先前计算出的该指纹(如果提供了相应选项,还会显示ascii-art),您将不得不回答是或否,这取决于您识别出该指纹或否(该指纹是密码的公共主机密钥的图像/哈希)。服务器)。如果您选择是,则服务器的公钥(不是其指纹)将添加到文件中~/.ssh/known_hosts

我们可以注意到,该~/.ssh/known_hosts目录位于您的主目录(〜)下,因为信任该主机(服务器),但是其他用户可能不信任您。另外,服务器的主机公钥也不依赖于用户,因此将其存储在中/etc/ssh/

第二个命令将显示从host_server_to_connect接收到的公共密钥的指纹和密码(根据选项中给出的哈希算法)。它与仅执行ssh相同,但具有更多可视选项,因此连接将以与普通ssh连接相同的方式继续。


在有关ASCII艺术的问题中,我没有看到任何东西。你为什么要谈论它?请不要在评论中回复;编辑  您的答案,使其更清晰,更完整。
斯科特

当您在评论中问我一个问题时,我在评论中回答:我说的是ascii-art,因为ascii-art是一种“验证Openssh中的主机指纹”的可视方式。
Nicolas VERHELST

为什么要强制使用MD5?只要有可用,就使用SHA-256!(否则,这是一个有用的答案,imo)。
Martin Prikryl

我使用MD5是因为它足以“手动”比较指纹。使用MD5比较指纹不会改变SSH对“操作使用”首选的哈希算法进行排序的方式。但是,是的,我同意我们应该在可用时使用SHA-256。(我编辑了这个问题,说首选sha256)。
Nicolas VERHELST
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.