SSH 服务器密钥验证:如何避免 2 种不同的密钥指纹格式?

SSH server key verification: How to avoid 2 different key fingerprint formats?

在与新 Linux 服务器 (Ubuntu) 的第一个 SSH 连接期间,我看到了格式如下的密钥指纹:

ECDSA key fingerprint is SHA256:Dvj5iH81LekYL2qA6VY1NkzXTB1TSkH+yc3kVclgGBc.
Are you sure you want to continue connecting (yes/no)? yes

当我想将这个指纹与我自己生成的指纹进行比较时,我使用

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

不幸的是,这会以不同的格式输出指纹,例如:

256 b1:53:22:1c:71:5e:11:f1:6c:a0:97:78:42:17:1b:b0  root@Ubuntu-1404-trusty-64-minimal (ECDSA)

如何确保两种情况下的格式相同,以便我可以轻松进行比较?

这是 openssh-6.8 中的最新更改,因为我们都知道 md5 已损坏,我们应该开始使用更新的东西。但是过渡不是那么顺利,因此您应该注意新选项 FingerprintHash。您可以存储在 ssh_config 中,或者在连接到服务器时仅在 command-line 上提供:

ssh -o FingerprintHash=md5 server

您无法获得您的服务器密钥的 SHA256 指纹,因为服务器可能有旧版本的 openssh,目前还不支持它。

Jakuje 的答案将允许您比较哈希值,但它迫使您继续使用 MD5 哈希值进行验证。 MD5 已被证明容易受到碰撞攻击,使其成为指纹验证的不佳选择。

一种更安全的方法是在服务器上手动生成 SHA256 指纹。您可以通过键入以下内容来执行此操作:

awk '{print }' /etc/ssh/ssh_host_ecdsa_key.pub | base64 -d | sha256sum | awk '{print }' | xxd -r -p | base64 | rev | cut -c 2- | rev

使用这种方法,您可以验证指纹,同时获得使用 SHA256 指纹的全部好处。我在 https://whatsecurity.nl/verifying_ssh_fingerprints_in_new_form.html.

上写了这个答案的更广泛版本