2013年2月3日 星期日

解決「SSH 連線,尚未輸入帳號、密碼即斷線」問題

為利用 SSH 連線時所提供的傳輸保密功能,幾乎「遠端(終端機)連線」多使用 SSH 這個連線協定。但是,偶而也是出現一種情況,使用 ssh(OpenSSH SSH client, Linux 系統)時較常發生,Putty(Windows 系統)反而較沒看過。
以 ssh 連線到「遠端主機」,「終端機」畫面一出現,連輸入帳號、密碼的提示文字都沒看清楚,就斷線。(:有時連「終端機」畫面也沒出現)
這是因為 ssh 會將「遠端主機」的 RSA 金鑰暫存在『 ~/.ssh/known_hosts 』這個檔案中,當「遠端主機」
  • 重新安裝作業系統
  • 重新安裝 ssh 套件
  • 重新產生 ssh 的 RSA 金鑰
時,「遠端主機」的 RSA 金鑰就會和本地所暫存的不同,ssh 在連線時,一發現兩個金鑰不同就立即斷線。讀者看到的情況,就如上面紅色虛線框中所描述。
    解決的步驟也很簡單,『懶人招』就是
[SiB@Celeron-D ~]$ rm -f ~/.ssh/known_hosts
但是,將所有本地暫存的「遠端主機」金鑰全數刪除,會有一段時間連線時會稍微麻煩些。每次新連線都會問:「是否將金鑰儲存?」,輸入【yes】或【no】的回答後,方繼續連線程序。
    想清楚暸解原因,請看以下詳細說明。

一、檢查本地的『已暫存』金鑰

在「終端機」下『 cat .ssh/known_hosts 』這個命令,可以列出『已暫存』的金鑰
[Sib@Celeron-D ~]$ cat .ssh/known_hosts
[192.168.10.52]:5566 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDR2pa8jOnwwFIHibH8/VO/zwKYA/1Ved08IhTEKAdyHA9pUxjYx4pfM3ZOtBDY7AcuDUqDfNdS7q7HcVr5OJLxoGE6/iyaXvXkcpoLPQPdRxZW1H+q3qmAu4cIOY58aFByLdIwzbD2T8r4A4MHaoCDuuwHbqGuIvF9DX6KQo2CgyWrHwaKmUg7TmduKH9ALsEPhZI27Q+StlvB19jMX8r+DvlFexa58mp9vMsfxwbxkmoFTgZQ8/pgLLv1gYBuhbDri+a4ngP9ATybyWMoUPlqRx5Dk3ww/NPDxD+ddNLQD4dNO9Nw0kT/VJk47J7N6484tO8hcY86VszbkzGEeoDZ
[192.168.10.17]:5566 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCky1YNePzBQ4OzrJf991eSWRdpqUu6/pEgJpV8gRXhM1aItm8FBEDiOjgtF5sSOVdUhY/+PlplX8Ne766Gp3AC7lsu6PwAXYXdZmOj3LRmQBlVdux4ddRQEhFJryjonghFFAoGljjy5K7XpNHotuTh0qJfZ/EkldaVdrrt60voUN3HviUKZYm+kkpCi12/0ux0JE20Lmi288LwZZECYXFr6jXXbLyzVHN0bdnxdzaTODRMxvrKw5vOFIJhLMlbZo0NTv2OkS142T1+9yfUHgDKeJDiLCicZZHukg/bv3v2+6en6pVh7wZVJPLL7Z41qHvXPJekJInbGYb14UCB9wfn
 . . . . . .
這些金鑰以「遠端主機」的「網路位址」和「埠號」為首,接著一連串看似亂碼的文字,就是「遠端主機」的金鑰。

二、連線錯誤的畫面

用 Gnome-RDP 這個套件進行連線,畫面就如上方紅色虛線框所述。但若在「終端機」下 ssh 命令,那麼看到的畫面訊息就不同了,
[SiB@Celeron-D ~]$ ssh 192.168.10.17 -p 5566 -l SiB
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ba:e1:ca:6a:bb:91:c2:52:0c:32:d2:19:04:85:68:30.
Please contact your system administrator.
Add correct host key in /home/SiB/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/SiB/.ssh/known_hosts:2
RSA host key for [192.168.10.17]:5566 has changed and you have requested strict checking.
Host key verification failed.
訊息主要是說在 ~/SiB/.ssh/known_hosts 的暫存金鑰檔中,順序排在第 2 之金鑰是錯誤的。

三、刪除錯誤的暫存金鑰

用『懶人招』當然很簡單,但若是曾經連線的「遠端主機」眾多,會有很長一段時間非常不方便。實際上,只要使用「文字編輯器」(如:gedit 或 vi)刪除錯誤的金鑰即可。

四、再次連線

將「遠端電腦」儲存在「本地電腦」的錯誤金鑰刪除後,再連線就會正常了。
[SiB@Celeron-D ~]$ ssh 192.168.10.17 -p 5566 -l SiB
The authenticity of host '[192.168.10.17]:5566 ([192.168.10.17]:5566)' can't be established.
RSA key fingerprint is ba:e1:ca:6a:bb:91:d2:52:0c:32:d2:19:04:85:b8:30.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.17]:5566' (RSA) to the list of known hosts.
SiB@192.168.10.17's password:
Last login: Mon Jan  7 21:00:11 2013 from 192.168.10.13
[SiB@Core-i7 ~]$

已測試版本:

  • Fedora: 14, 17, 18

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)