什麼是 SSH 金鑰指紋以及它是如何產生的?

什麼是 SSH 金鑰指紋以及它是如何產生的?

ssh當我進入新機器時,我總是發現收到此訊息:

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

它代表什麼?每台機器每次都會有相同的指紋嗎?

這些指紋是如何產生的?它們取決於什麼參數?

答案1

指紋基於主機的公鑰,通常基於檔案/etc/ssh/ssh_host_rsa_key.pub。通常,它是為了輕鬆識別/驗證您要連接的主機。

如果指紋發生變化,則您正在連線的機器已變更其公鑰。這可能不是一件壞事(重新安裝 ssh 時發生),但它也可能表明您正在連接到同一域/IP 上的另一台電腦(當您通過負載平衡器等連接時發生)或您正成為中間人攻擊的目標,​​攻擊者以某種方式攔截/重新路由您的ssh 連線以連接到可能窺探您的使用者名稱/密碼的不同主機。

底線:如果您收到指紋變更的警告,請務必小心並仔細檢查您是否確實透過安全連線連接到正確的主機。儘管大多數時候這是無害的,但它可能表明存在潛在問題。

看: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

答案2

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

答案3

指紋是 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

md5sum 6530389635564f6464e8e3a47d593e19 是產生金鑰時顯示的指紋,只是沒有分隔冒號。


但是,如果您正在處理 Amazon 在 EC2 金鑰對控制台中顯示的指紋, 不幸的是,這可能是個不同的野獸。如果是32位元的十六進位字串,就是上面的標準MD5 SSH公鑰指紋。但如果是 40 個十六進制數字,它實際上是透過 SHA1 計算得出的指紋私鑰PKCS#8 格式:

$ 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

答案4

要檢查 Azure Devops 上存在的指紋,您可以使用

$ ssh-keygen -E md5 -lf .ssh/id_rsa.pub
2048 MD5:ba:42:24:87:d6:7b:71:a2:3e:b5:9a:31:b2:2c:e0:00 CrazyGirrafe@Australasia (RSA)

相關內容