![为什么我的 OpenSSH 密钥指纹与 AWS EC2 控制台密钥对指纹不匹配?](https://linux22.com/image/634637/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20OpenSSH%20%E5%AF%86%E9%92%A5%E6%8C%87%E7%BA%B9%E4%B8%8E%20AWS%20EC2%20%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%AF%86%E9%92%A5%E5%AF%B9%E6%8C%87%E7%BA%B9%E4%B8%8D%E5%8C%B9%E9%85%8D%EF%BC%9F.png)
当我将 OpenSSH 公钥导入 AWS EC2 的密钥环时,AWS 显示的指纹与我看到的不匹配:
ssh-keygen -l -f my_key
它的长度不同并且字节数也不同。
为什么?我确定我上传了正确的密钥。
答案1
AWS EC2 显示 SSH2 指纹,而不是大家期望的 OpenSSH 指纹。用户界面中没有显示这一点。
它还表明两种完全不同的指纹取决于密钥是在 AWS 上生成并下载的,还是您上传了自己的公钥。
指纹生成
ssh-keygen -l -f id_rsa
将要不是与 EC2 显示的内容匹配。您可以使用 AWS API 工具通过命令生成指纹ec2-fingerprint-key
,也可以使用 OpenSSL 来执行此操作。
请注意,如果你最初在 AWS 上生成了密钥,但随后又将其上传(例如,上传到另一个区域),那么你将获得不同的指纹因为它将采用 SSH2 RSA 指纹,而不是您在 AWS 上生成的密钥显示的 sha1。
有趣吧?
在上面,test-generated
是使用 AWS EC2 生成的。test-generated-reuploaded
是从 AWS 私钥中生成的公钥,用 提取ssh-keygen -y
并再次上传。第三个密钥test-uploaded
是本地生成的密钥……但本地ssh-keygen -l
指纹是b2:2c:86:d6:1e:58:c0:b0:15:97:ab:9b:93:e7:4e:ea
。
$ ssh-keygen -l -f theprivatekey
2048 b2:2c:86:d6:1e:58:c0:b0:15:97:ab:9b:93:e7:4e:ea
$ openssl pkey -in theprivatekey -pubout -outform DER | openssl md5 -c
Enter pass phrase for id_landp:
(stdin)= 91:bc:58:1f:ea:5d:51:2d:83:d3:6b:d7:6d:63:06:d2
密钥已上传至 AWS
当您将密钥上传到 AWS 时,您只上传公钥,AWS 会显示公钥的 MD5 哈希值。
您可以使用 OpenSSL,因为Daniel 在 AWS 论坛上进行了演示,以 AWS 使用的形式生成指纹,以显示已上传公钥(SSH2 MD5)的指纹,例如:
7a:58:3a:a3:df:ba:a3:09:be:b5:b4:0b:f5:5b:09:a0
如果您有私钥,则可以通过从私钥中提取公共部分并使用以下方法对其进行哈希处理来生成指纹:
openssl pkey -in id_rsa -pubout -outform DER | openssl md5 -c
如果您只有公钥,并且它是 OpenSSH 格式,则需要先将其转换为 PEM,然后转换为 DER,然后进行哈希处理,使用:
ssh-keygen -f id_rsa.pub -e -m PKCS8 | openssl pkey -pubin -outform DER | openssl md5 -c
在 AWS 上生成的密钥
当您在 AWS 上生成密钥对时,AWS 会显示私钥的 SHA1 哈希值,该哈希值更长,例如:
ea:47:42:52:2c:25:43:76:65:f4:67:76:b9:70:b4:64:12:00:e4:5a
在这种情况下,您需要使用以下命令(Daniel 在 AWS 论坛上也展示了该命令)根据私钥生成 sha1 哈希:
openssl pkcs8 -in aws_private.pem -nocrypt -topk8 -outform DER | openssl sha1 -c
在下载的 AWS 生成的私钥/证书文件上。它也适用于您转换为 OpenSSH 格式的密钥。但是,这要求您拥有私钥,因为哈希是私钥的。如果您只有公钥,则无法在本地生成哈希。
参考
看:
答案2
如果您只有公钥,则可以按如下方式生成 AWS 指纹:
ssh-keygen -e -f id_rsa.pub -m pkcs8 | openssl pkey -pubin -outform der | openssl md5 -c
答案3
AWS 文档上有相关资源http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#verify-key-pair-fingerprints
如果您使用 AWS 创建了密钥对,则可以使用 OpenSSL 工具从私钥文件生成指纹:
复制
$ openssl pkcs8 -in path_to_private_key -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
如果您使用第三方工具创建了密钥对并将公钥上传到 AWS,则可以使用 OpenSSL 工具从本地计算机上的私钥文件生成指纹:
复制
$ openssl rsa -in path_to_private_key -pubout -outform DER | openssl md5 -c
输出应该与控制台中显示的指纹相匹配。
答案4
万一这可能有用:https://ssh-vault.com/post/fingerprint/
例如:
$ ssh-vault -u bob -f
将打印与 AWS 使用的格式匹配的用户 bob 的指纹。