Ssh

為什麼我的 OpenSSH 密鑰指紋與 AWS EC2 控制台密鑰對指紋不匹配?

  • January 6, 2022

當我將我的 OpenSSH 公鑰導入 AWS EC2 的密鑰環時,AWS 顯示的指紋與我看到的不匹配:

ssh-keygen -l -f my_key

它是不同的長度並且具有不同的字節。

為什麼?我確定我上傳了正確的密鑰。

AWS EC2 顯示的是 SSH2 指紋,而不是大家期望的 OpenSSH 指紋。使用者界面中沒有這樣說。

它還顯示*兩種完全不同的指紋,*具體取決於密鑰是在 AWS 上生成並下載的,還是您是否上傳了自己的公鑰。

生成的指紋

ssh-keygen -l -f id_rsa

與 EC2 顯示的不*匹配。*您可以使用 AWS API 工具通過ec2-fingerprint-key命令生成指紋,也可以使用 OpenSSL 來執行此操作。

請注意,如果您最初在 AWS 上生成了密鑰,但隨後再次上傳(例如,到另一個區域),那麼您將獲得不同的指紋,因為它將採用 SSH2 RSA 指紋,而不是它為您顯示的密鑰的 sha1在 AWS 上生成。

好玩,嘿?此螢幕截圖中有兩個具有不同指紋的相同密鑰副本

在上面,test-generated是使用 AWS EC2 生成的。是 AWS 生成、提取並再次上傳test-generated-reuploaded的私鑰中的公鑰。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 格式的密鑰。但是,這確實要求您擁有私鑰,因為雜湊是私鑰的。如果您只有公鑰,則無法在本地生成雜湊。

參考

看:

引用自:https://serverfault.com/questions/603982