在与新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)
如何确保在两种情况下都获得相同的格式,以便我可以轻松比较?
答案 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,到目前为止还不支持。