什么是SSH密钥指纹,是如何生成的?
我总是发现,当我ssh
进入新的机器时,会收到这样的信息:
12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53
代表什么?每台机器每次都会有同样的指纹吗?
这些指纹是怎么生成的?它们取决于哪些参数?
我总是发现,当我ssh
进入新的机器时,会收到这样的信息:
12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53
代表什么?每台机器每次都会有同样的指纹吗?
这些指纹是怎么生成的?它们取决于哪些参数?
你可以用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
```。
指纹是 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
指纹是基于主机的公钥,通常基于"/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
同样的命令可以和GitHub的一个很好的功能结合起来,那就是他们会公开提供用户的SSH公钥,网址是https://github.com/<username\.keys
这里有一个单行本,你可以利用它。
ssh-keygen -r host.name.com
将输出 sshd 实例上所有配置的公钥的指纹。