获取SSH公钥的SHA1摘要

这似乎应该是容易的。 我运行“ssh-keygen -l -f”(默认好像是SHA1)。 所有的例子都显示了它打印hex格式的摘要带有一些额外的,无害的信息。 然而,在我的Mac上,我得到一个无用的,不透明的string。

我应该提到“-E”参数适用于Mac(10.10),但在Ubuntu(14.04)中不可用。 请记住,如果它不适合你。

$ ssh-keygen -l -E md5 -f dustin.pem 2048 MD5:29:ed:da:d3:5a:8c:78:4f:62:d3:fd:0c:77:5b:6d:d9 dustin.pem.pub (RSA) $ ssh-keygen -l -E sha1 -f dustin.pem 2048 SHA1:x2ENPL+vzVdlgkIyu0tAhVQ+H4U dustin.pem.pub (RSA) $ ssh-keygen -l -E sha256 -f dustin.pem 2048 SHA256:agJs/axI8QPzet/eoPMDxLSf37fd1bgsMX4Di0gqMy4 dustin.pem.pub (RSA) 

两种尝试的SHAalgorithm都返回不透明但不同的ASCIIstring。

我错过了什么? 我如何得到一个SHA1hex文件,而不必将我的密钥复制到Linux系统来做到这一点?

谢谢。

传统上,OpenSSH使用hex的MD5显示(公共)密钥指纹,或者可选地显示为“ASCII艺术”或“泡泡”(一系列无意义但可读的5个字母的准词)。 6.8 2015年3月在(PEMstyle)base64中为SHA1和SHA256添加了选项,后者现在是默认选项,并且在所有三种情况下,哈希名称都以前缀为前缀,因此您知道它是哪个。 从那时起, ssh-keygen -l只有-E选项,Ubuntu 14.04的date是2015年3月之前。

由于ssh客户端从不显示MD5-hex或SHA1-base64(不是默认值)或SHA256-base64,因此您不需要使用hex的SHA1摘要来validation主机。 如果你想要一个,除了“rsa1”键之外,你可以很容易地做到这一点,在奥巴马成为美国总统之前,你应该停止使用SSHv1协议,因此也就是rsa1键。

从base64'blob'

  • id_$alg.pub字段2或类似文件,或输出ssh-keygen -y
  • known_hosts文件中的第3行,除非它有一个标记,那么字段4
  • authorized_keys文件中的第2行,除非它有选项,那么字段3

并将其从base64转换为二进制,散列与所需的散列和显示在所需的表示forms。 由于默认情况下openssl以hex显示散列,并且可以从(和)base64转换,所以你可以做类似的事情

 awk '{$print $2}' id_xxx.pub | openssl base64 -d -A | openssl sha1 

注意-A ; 否则openssl默默无法解码base64长度超过76个字符和除ed25519之外的OpenSSH pubkey blob更长。

另外请注意,您可以通过-o FingerprintHash=MD5或等效的ssh_config设置来指示较新的ssh客户端显示旧的MD5-hex指纹。

这些string看起来是base64编码哈希值。