用ssh登入通常需要密碼,有些情況下SSH不想要輸入密碼,(例如:想要寫script進行ssh遠端操作,一來ssh連線輸入密碼的地方又必須是interactive的沒辦法在script裡面寫密碼,二來是密碼用明碼紀錄在script實在是不大安全)。本篇用最快速的方式介紹SSH免登入的設定方式,本次要介紹的方式就是在Client端產生一組金鑰,然後把把公開金鑰複製到Server的信任名單中。
關鍵知識
其實關鍵點只有下面這兩點(注意,這兩點所說的檔案是放在兩台不同的主機喔):
- 要連接ssh的client端必須產生一組主機使用者的金鑰組。金鑰組可以在~/.ssh中找到,檔名是id_rsa(私鑰)、id_rsa.pub(公鑰)。(ps. rsa是加密演算法的名子,也可能利用其他的演算法對金鑰加密,如dsa等)。如果沒有產生金鑰組則必須產生一組,方法詳見Step1。一般來說,公鑰的檔名會像是這樣:
~/.ssh/id_rsa.pub
- 把公鑰複製到Server端的信任名單中。一般來說會放在下面檔案中:
~/.ssh/authorized_keys
後面的範例是從金鑰產生到匯入信任清單的示範,如果有需要的話可以參考。
Step 1. 在Client端產生金鑰組
使用下面指令就可以產生金鑰,所有設定都用預設的就可以了,不需要特別設置。特別注意的是”Enter passphrase”的地方請直接壓enter,這樣才能不用輸入密碼。
ssh-keygen -t rsa
金鑰組檔案會預設放在~/.ssh/id_rsa是私鑰(private key)、~/.ssh/id_rsa.pub是公鑰(public key)。金鑰組務必保存好權限不要開太大,否則會造成安全性的問題。
2. 將公鑰的內容放置在Server的信任清單中
只要在client端下下面這個指令,這樣金鑰就會輸入進Server的信任清單中了。實在是很簡單吧。
cat ~/.ssh/id_rsa.pub | ssh server-user@server-host "cat >> ~/.ssh/authorized_keys"
另外特別還是要補充一下,因為金鑰如果可供寫入的話十分危險。所以許多人會將 ~/.ssh裡面的id_rsa.pub id_rsa authorized_keys三個檔案設定成唯獨,所以如果不成功的話,可能是server端的user把authorized_keys設定成唯獨。所以可以用下面這個指令先把authorized_keys檔案的讀寫先打開再下Step2的命令:
ssh server-user@server-host "chmod 600 ~/.ssh/authorized_keys"
設定完畢後記得再把權限改回來
ssh server-user@server-host "chmod 400 ~/.ssh/authorized_keys"
同場加映 ssh 用不同的port
cat ~/.ssh/id_rsa.pub | ssh server-user@server-host -p8080 "cat >> ~/.ssh/authorized_keys"