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)