2010年6月3日 星期四

取得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

差點忘記附上參考資料:

How to get ssh server fingerprint information http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html

SSH Host Key Protection http://www.symantec.com/connect/articles/ssh-host-key-protection

沒有留言:

張貼留言