2012-05-08 14:22:34 +0000 2012-05-08 14:22:34 +0000
147
147

什么是SSH密钥指纹,是如何生成的?

我总是发现,当我ssh进入新的机器时,会收到这样的信息:

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

代表什么?每台机器每次都会有同样的指纹吗?

这些指纹是怎么生成的?它们取决于哪些参数?

答案 (5)

128
128
128
2012-07-24 16:26:09 +0000

你可以用ssh-keygen生成一个公钥的指纹,比如:

ssh-keygen -lf /path/to/key.pub

具体例子(如果你使用的是RSA公钥):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

第一部分(2048)是密钥长度,单位是比特,第二部分(00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)是公钥的指纹,第三部分是公钥文件本身的位置。

在较新版本的OpenSSH中,显示的是Base64编码的SHA-256,而不是十六进制的MD5。要显示传统风格的散列,请使用

$ ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
```。
74
74
74
2014-02-08 20:40:35 +0000

指纹是 Base64 编码的公钥中的二进制数据的 MD5。

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[RSA 2048]----+
| +*..+* |
| =. +.= |
| . . .o . |
| o+ E |
| S= . + o |
| . o o + |
| . . |
| |
| |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19
$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58

md5sum 6530389635564f6464e8e3a47d593e19 是生成密钥时显示的指纹,只是没有分隔的冒号。


然而,如果您处理的是亚马逊在 EC2 Key Pairs 控制台中显示的指纹 不幸的是,这可能是不同的野兽。如果是 32 位十六进制字符串,就是上面的标准 MD5 SSH 公钥指纹。但如果是40个十六进制的字符串,实际上是由PKCS#8格式的private key的SHA1计算出的指纹:

&001

69
69
69
2012-05-08 14:41:50 +0000

指纹是基于主机的公钥,通常基于"/etc/ssh/ssh_host_rsa_key.pub",一般来说,它是为了方便识别/验证你所连接的主机。这可能不是一件坏事(重新安装ssh时发生的),但也可能表明你连接到了同一个域/IP的不同机器(当你通过负载均衡器等连接时就会发生),或者你被中间人攻击,攻击者以某种方式拦截/重定向你的ssh连接,以连接到不同的主机,而这可能是在窥探你的用户/用户的IP地址。

底线:*如果你被警告说指纹被改变了,要小心谨慎,并仔细检查你是否通过安全连接连接到了正确的主机。虽然大多数情况下这是无害的,但它可能是一个潜在问题的迹象

参见。 http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html 和: http://en.wikipedia.org/wiki/Public\key_fingerprint

23
23
23
2019-03-29 21:52:44 +0000

同样的命令可以和GitHub的一个很好的功能结合起来,那就是他们会公开提供用户的SSH公钥,网址是https://github.com/<username\.keys

这里有一个单行本,你可以利用它。

1
1
1
2017-11-26 04:32:06 +0000
ssh-keygen -r host.name.com

将输出 sshd 实例上所有配置的公钥的指纹。