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

时间:2015-12-30 15:42:59

标签: authentication ssh public-key

在与新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)

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

2 个答案:

答案 0 :(得分:2)

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

更安全的方法是手动在服务器上生成SHA256指纹。您可以输入以下命令来执行此操作:

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

使用此方法,您可以在获得使用SHA256指纹的全部好处的同时验证指纹。我在https://whatsecurity.nl/verifying_ssh_fingerprints_in_new_form.html上写了一个更广泛的答案。

答案 1 :(得分:1)

这是openssh-6.8的最新变化,因为我们都知道md5已经坏了,我们应该开始使用更新的东西了。但是过渡并不是那么顺利,所以你应该知道新选项FingerprintHash。您可以在连接到服务器时存储在ssh_config中或仅在命令行上提供:

ssh -o FingerprintHash=md5 server

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