所幸 SSH 有個不需輸入密碼的「自動認證」的機制,
- 建立「公鑰」、「私鑰」
- 將「公鑰」上傳到將登入的電腦
- 建立連線時,自動認證並登入
一、建立「公鑰」「私鑰」
說是不同密碼,還是要有驗證的過程才算安全。在 Linux 的 SSH 套件裏有個『ssh-keygen』的程式,可以產生一組「公鑰」「私鑰」。[SiB@Celeron-D ~]$ ssh-keygen -t dsa基本上,上面過程中的詢問都可以直接按【Enter】鍵直到「金鑰」產生。其中,有個詢問『Enter passphrase (empty for no passphrase):』的作用需要再加以說明。
Generating public/private dsa key pair.
Enter file in which to save the key (/home/SiB/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/SiB/.ssh/id_dsa.
Your public key has been saved in /home/SiB/.ssh/id_dsa.pub.
The key fingerprint is:
51:bd:6e:e7:b6:d0:d8:7f:5e:ca:15:1b:cb:4a:ee:ee SiB@Celeron-D
The key's randomart image is:
+--[ DSA 1024]----+ | .o | | . o | | . o | | .. + . | | .So B | | . o o * | | o . o + .| | o o...o| | +E .oo.| +-----------------+[SiB@Celeron-D ~]$
「密語(passphrase)」的作用是用來保護「私鑰」不被濫用,
怎麼會說『被濫用』呢?這是假設你儲存「私鑰」的電腦萬一被入侵,所有你曾上傳、儲存「公鑰」的電腦,才不會立即被入侵。至少,駭客還得再破一次「密語」才行。若你有設定「密語」,在做「公、私鑰」驗證時,必須輸一次「密語」,這對想『完全』省掉輸密碼麻煩的人沒有幫助。
二、上傳至「伺服器」
產生的「公鑰」需要上傳到「伺服器」或是你將來想用 SSH 連線的電腦。可以透過 SFTP 或是用 scp 這個只做一次傳輸的簡單命令。
[SiB@Celeron-D ~]$ scp -P 5566 ~/.ssh/id_dsa.pub SiB@192.168.10.15:.ssh/newkey上例中假設 5566 是「伺服器」的 SSH 埠號,『~/.ssh/id_dsa.pub』是本地的 dsa「公鑰」,而『SiB@192.168.10.15』是指複製目的端的電腦 IP 為 192.168.10.15、登入帳號為 SiB,『:』後的『.ssh/newkey』是目的端電腦的「公鑰」暫存檔。
SiB@192.168.10.15's password:
id_dsa.pub 100% 601 0.6KB/s 00:00
[SiB@Celeron-D ~]$
三、以平常方式連線至「伺服器」
把「公鑰」上傳到「伺服器」後,還要將之加入「已認證金鑰」檔,才算完成整個設定步驟,這個加入「已認證金鑰」檔的步驟,要在「伺服器」端進行。所以,接下來要建立「本地電腦」到「伺服器」的「遠端終端機」連線。當然,這時候還是要輸入密碼的。[SiB@Celeron-D ~]$ ssh 192.168.10.15 -p 5566 -l SiB上例中的 192.168.10.15 及 5566 分別是「伺服器」的 IP 網址 及 SSH 埠號,而登入帳號為 SiB。
[SiB@Core-i7 ~]$
四、將「公錀」附加到「認證金錀」檔
[SiB@Core-i7 ~]$ cd .ssh上例中,第一個命令是將「目前工作目錄」更改為『~/.ssh/』,而第二個命令是將剛才上傳的「公鑰」附加(append)到『authorized_keys』這個檔案的尾巴。
[SiB@Core-i7 .ssh]$ cat newkey >> authorized_keys
注意:若『authorized_keys』這個檔案不存在,則第二個命令可以改為
[SiB@Core-i7 .ssh]$ mv newkey authorized_keys將『newkey』更改檔案名為『authorized_keys』,或
[SiB@Core-i7 .ssh]$ cat newkey > authorized_keys將『newkey』的內容「覆寫(overwrite)」到『authorized_keys』,或
[SiB@Core-i7 .ssh]$ touch authorized_keys以『touch』先產生一個檔名為『authorized_keys』的空檔,再附加內容。
[SiB@Core-i7 .ssh]$ cat newkey >> authorized_keys
五、將上傳的「公鑰」暫存檔刪除
若上一步驟操作後,剛才上傳的暫存檔還在,可以將之刪除。
[SiB@Core-i7 .ssh]$ rm newkey
註:不用的檔案,確定不會再用的話,最好立即刪除,免得以後忘了其用途時,還會傷腦筋。
六、更換「公鑰」
若是因「本地電腦」重灌作業系統,或是因為安全理由,要更換「公鑰」時,可以到「伺服器」端,修改你的「已認證金鑰」檔。使用你熟悉的「純文字編輯器」,例:gedit 或 vim 編輯這個檔案。
每一個「金鑰」都是以『ssh-dss』為開始,並以『帳號名@本地電腦名稱』或『帳號名@本地電腦 IP 網址』為結束。將這個金鑰刪除後,再重新附加入新的金鑰即可。
七、延伸說明
有些小經驗,順便在這裏提一下:- 有些網路的步驟是產生 RSA「金鑰」而不是 DSA「金鑰」,根據筆者所知,
- RSA 運算較快,但安全性較差
- DSA 安全性較佳,但運算較慢
- 以現在電腦的速度,運算已不是問題,安全性比較重要。
- 若「本地電腦」的安全程度不足,最好在產生「公、私鑰」時,輸入「密語」以增加「本地電腦」中「私鑰」的安全性,減少「本地電腦」被當做『跳板』的可能性。
- 需要管理很多電腦的「系統管理者」,利用「公、私鑰」再加上「密語」的安全性,可以有類似「單一密碼登入」的好處,管理時在不同系統切換時,不用記一堆不同的密碼。
已測試版本:
- Fedora: 14, 17
請問一下照上面做完之後還是無法成功不用密碼連線
回覆刪除可能是什摩原因??
試一下這個命令:ssh-add
刪除將金鑰加入認證機制的列表中。
已解決 謝謝!!
刪除