- CATALOG -
取得 SSH server public key 的 fingerprint

不說廢話先給答案:

$ ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub  

對於廢話有興趣的請繼續閱讀…………

手邊的機器管一陣子之後,就會開始手癢想要重灌XD
每次重灌完,要 ssh 上去的時候,都會遇到 key 不符合的情形….畫面長得像是這樣:

$ ssh Some-Server  
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @  
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!  
Someone could be eavesdropping on you right now (man-in-the-middle attack)!  
It is also possible that the RSA host key has just been changed.  
The fingerprint for the RSA key sent by the remote host is  
<這裡是一長串的fingerprint,會有16進位數字,用冒號分隔>.  
Please contact your system administrator.  
Add correct host key in /home/crboy/.ssh/known_hosts to get rid of this message.  
Offending key in /home/crboy/.ssh/known_hosts:1  
RSA host key for [這裡是server的IP address]:PORT has changed and you have requested strict checking.  
Host key verification failed.

然後就會沒辦法連線………orz

細節我就不提了,反正我也沒有知道得很清楚。只是,這個機制是為了安全而做的,要是不謹慎一點的話,搞不好攻擊者就趁你重灌之後,偷偷攔截你的連線做 man-in-the-middle 攻擊。所以確認新的 fingerprint是正確的這件事很重要。

以前年少無知的時候,我都是這樣解決 key 不符合的問題的……

$ rm ~/.ssh/known_hosts  

………………對不起我錯了…..<(_ _)>

這麼做,不但你現在想要連的那個站儲存的 key 被砍了,就連其他你曾經 ssh 上去過,曾經信任他的站的 key 都砍了…..這樣真的很糟糕= =
後來我發現其實在連線的時候,錯誤訊息就會告訴你這個站的 key 存在 known_hosts 的第幾行…(如上面的範例所示)…所以只要把那行刪掉,就可以正常連線,又不會影響到其他站了。可是問題來了,我該怎麼確認新拿到的 key 是正確的呢?這時候就要靠 fingerprint 來幫忙了!

……..呃….好啦,相關的背景知識我也講得不清楚,我只想知道怎麼確定 fingerprint 是對的就好,方法如下:

在要被連線的 server 上,應該會有這樣的檔案:

/etc/ssh/ssh_host_rsa_key.pub  
/etc/ssh/ssh_host_dsa_key  
/etc/ssh/ssh_host_rsa_key  
/etc/ssh/ssh_host_dsa_key.pub  

這些就是你的 server 的 host key….那些 *_key.pub 的就是 public key,另外要注意的是,_key 結尾的那些是 private key,只有 root 可以讀寫!給 ssh 連線確認的話,只需要用到 public key 就好,所以不需要 root 權限。指令如下:

$ ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub  

或是改成 ssh_host_dsa_key.pub,看你的 ssh client 用什麼認證。但是我只遇過 RSA key 認證的情形,也不知道用 DSA 會怎樣。XD"

於是乎,我們會得到一個 fingerprint,也就是這個 key 的「指紋」,可以用來辨認對方收到的 key 是不是正確的,所以當你要把 server 開放給某個人連線的時候,記得給他 server 的 fingerprint 唷!:D

參考資料


Last modified on 2010-06-03

- CATALOG -