2010/08/13

SSH 免密碼登入

Linux/Ubuntu 底下,假設您要從 PC-A 的 user1 免密碼驗證 SSH 登入到 PC-B 的 user2。
如果兩台機器的使用者您都很信得過,覺得大家互相登入來登入去,ok 的!
那底下是直接的指令,只有 3 行,照著執行完就可以了:

user1@PC-A:~$ ssh-keygen -t rsa

user1@PC-A:~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

user1@PC-A:~$ scp -r ~/.ssh user2@PC-B:~/

*輸入第一行指令後一直壓 enter,都使用預設或空白的設定即可。
*注意:操作完成,PC-A 的 user1 和 PC-B 的 user2 是可以「互相」免密碼登入的唷!

如果遇到 ssh host key check 的問題,可以在登入的 ssh 指令後加上:
-o StrictHostKeyChecking=no

強制忽略欲登入主機的 host key 檢查,例如:
user1@PC-A:~$ ssh -o StrictHostKeyChecking=no user2@PC-B

---

基本的原理就是使用一對「公鑰/私鑰」。
欲登入方持有私鑰,被登入方持有公鑰。
以自動驗證公鑰、私鑰是否成對來進行登入確認。

公鑰、私鑰是成對的,只要產生一組並且把它們保存好,就可以一直用。
公鑰、私鑰驗證的細節是很神奇的數學,這就不談了,因為我也不懂。
我只簡單地、直接地說一下免密碼登入怎麼設定,更多內容可以參考 reference。

user1 先在 PC-A 下先產生一對公鑰、私鑰,使用:
ssh-keygen -t rsa

它會請您設定鑰匙存放的路徑、以及一個使用時的 passphrase。
*請務必使用預設即可!
*一直壓 enter 鍵就好了!

完成後,user1 的家目錄底下會有 .ssh 這個資料夾,使用:
cd ~/.ssh/
ls -l ~/.ssh/

裡面至少會有這兩個檔案:
id_rsa
id_rsa.pub

id_rsa 就是這次產生的私鑰,id_rsa.pub 則是這次產生的公鑰。

接下來,如果您很懶,直接使用:
cp id_rsa.pub authorized_keys

將公鑰複製成檔名為 authorized_keys 的檔案。

然後使用:
scp -r ~/.ssh user2@PC-B:~/

將 user1 在 PC-A 上的整個 .ssh 資料夾複製到 PC-B 的 user2 家目錄下。
*注意:如此一來,不僅 user1 可以從 PC-A 直接免密碼登入 PC-B 的 user2。
*注意:如此一來,就連 PC-B 的 user2 也可以直接免密碼登入 PC-A 的 user1!

如果您不希望 PC-B 的 user2 免密碼登入 PC-A 的 user1,上面步驟做完後,
登入 PC-B 的 user2,使用:
cd ~/.ssh/

再使用:
rm id_rsa id_rsa.pub

在 user2 的 .ssh 資料夾裡僅留下 authorized_keys 檔案即可。

Reference:
01. http://josephjiang.com/article/understand-ssh-key/
02. http://help.github.com/linux-key-setup/
03. http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html