在新版本的openssh中以(旧)十六进制格式获取SSH密钥指纹


40

似乎openssh改变了它显示关键指纹的方式。

我正在尝试从客户端计算机SSH到服务器:

  • 客户端:运行OpenSSH 6.6.1的ubuntu 14.04
  • 服务器:运行OpenSSH 7.2p2的FreeBSD。

客户端将服务器密钥的md5哈希报告为16对十六进制数字的序列,如下所示:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

服务器默认使用sha256哈希,但是由于这个答案,我可以通过运行以下命令强制它提供sha1哈希:

[root@host /etc/ssh]# ssh-keygen -l -E sha1 -f ssh_host_ecdsa_key.pub

我希望结果看起来像这样:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

但是我得到了这个:

256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI root@host.local (ECDSA)

在我看来,现在正在显示指纹的base64编码版本,而不是十六进制数字。

如何获取服务器密钥的校验和,格式与(较旧的)客户端报告的格式相同(冒号分隔的十六进制数字,sha1哈希),以检查它们是否相同?

编辑: SSH的旧版本提供了md5校验和,而不是我错误地认为的sha1校验和。在-E选项中使用该校验和(应为现在接受的答案指出)可提供所需的输出。

Answers:


52

客户端将服务器密钥的sha1哈希报告为16对十六进制数字的序列,如下所示:

    a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

这是MD5哈希。

如您所见,跑步

ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub

无需您在答案中说明的harakiri,即可获得所需的指纹。


1
不幸的是,这不起作用。我的问题包含运行您建议的命令的结果。较新版本的ssh-keygen会将md5哈希作为(base64编码的?)字符串而不是十六进制字符串。“所有这些harakiri”(一个恰当的描述!)是我可以从新版本的openssh工具中获取旧样式的十六进制字符串的最简单方法。
随机

除非FreeBSD破坏了某些东西(或取消了对MD5的支持),否则没有理由不起作用。请注意,您的命令列出的是错误的sha1而不是md5!我已经用openssh-6.9淘汰了Ubuntu版本,但是它工作得很好。
贾库耶

1
md5而不是sha1 ...不知道我怎么想的。确实确实提供了匹配的输出。
随机

我有相反的问题。我有md5并想要其他格式。我如何得到它?
加布里埃尔·斯台普斯

1
在ubuntu上执行命令时有效。在centos上执行命令时不起作用。
Marinos

5

事实证明,SSH Cookbook提供了一种以旧的十六进制格式手动生成密钥的方法。我在freebsd服务器上使用了它。

awk'{print $ 2}'key.pub | base64 -d | md5 | sed的s /../&:/ g; s /:。* $ //'

分解如下:

awk'{print $ 2}'key.pub

打印出“ key.pub”中的第二个(以空格分隔)列,这是密钥本身

base64 -d

密钥是base64编码的。这将输出密钥的实际字节

md5

这相当于FreeBSD的ssh食谱页面上的配方中指定的“ md5sum -b”

sed的s /../&:/ g; s /:。* $ //'

这里有两个sed命令:

s /../&:/ g;

用同一对替换冒号替换行中的每对字符(由于末尾有“ g”标志)

s /:。* $ //'

删除任何结尾的冒号(替换冒号,后跟空格,直到行尾的任何东西,什么都没有)。


4

在这种情况下,我使用以下小脚本(在Debian和Ubuntu上进行了测试):

#!/bin/sh

# Gather the public ssh host keys for the given host
# and for each key print the fingerprint in hex format using the given
# checksum command (e.g. md5sum, sha256sum, ...)

if [ "$#" != 2 ]; then
  echo "usage: $0 hostname checksum_command"
  exit 1
fi

ssh-keyscan $1 2>/dev/null | while read -r line; do
  echo "Scanned key:"
  echo $line
  echo "$2 fingerprint:"
  echo $line | awk '{print $3}' | base64 -d | $2 -b | awk '{print $1}' | sed 's/../&:/g' | sed 's/:$//'
  echo
done

用法示例:

$ myscript host.example.com md5sum
Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
md5sum fingerprint:
6c:ef:26:f7:98:ad:ed:5b:cc:ff:83:13:46:c9:f6:79

Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
md5sum fingerprint:
b2:9c:cd:30:b1:38:e3:d1:17:d6:73:eb:03:9a:80:83

$ myscript host.example.com sha256sum
Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
sha256sum fingerprint:
f4:61:58:e4:90:65:c4:70:98:7f:d1:40:0a:d8:d9:79:14:e6:91:dc:b6:ed:91:8c:c0:df:d9:65:db:dd:a0:18

Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
sha256sum fingerprint:
4b:73:d1:d7:80:87:46:64:56:71:64:10:7a:66:83:9b:c7:58:39:0b:16:74:dd:9b:d9:4b:e5:d5:61:7e:99:45
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.