通常情況下,每次使用ssh登入或使用scp複製遠程系統的檔案時,都需要提供密碼,然後才能做進一步的處理。為了省略輸入密碼這一步驟,有時可以採用Shell指令碼的方法解決,但這需要把手工輸入的密碼以明碼形式放在指令檔中。
利用密鑰設定檔,OpenSSH可以是ssh遠程登入與scp檔案複製的操作過程中省略密碼驗證的中間環節。為此,ssh用戶端首先應建立OpenSSH串連,然後自動地想伺服器發送其公開金鑰。之後,伺服器即可根據相應使用者主目錄中預定義的密鑰列表,對收到的密鑰進行比較。如果存在匹配的密鑰,伺服器將會允許ssh或sco自動登入。
密鑰檔案需要單獨產生,產生後的密鑰檔案儲存體在伺服器使用者主目錄的~/.ssh子目錄中。其中,id_rsa和id_rsa.pub檔案分別是私玥和公開金鑰,而authorized_keys檔案則用於儲存所有授權的遠程客戶系統的公開金鑰,使得遠程客戶系統能夠以此使用者的身份登入到本地系統而無需提供密碼。
為了實現ssh和scp的無密碼登入,需要事先產生並安裝遠程登入與資料轉送的密鑰,其唯一的限制是需要把密鑰綁定到兩個系統的IP地址上。然後,伺服器即可使用預先安裝的密鑰,對每一次的遠程登入和檔案傳輸進行驗證。但是,這以功能不適合於利用DCHP協議動態分配IP地址,致使IP地址經常發送變化的情況。
由於只需知道使用者名稱即可實現遠程註冊和檔案傳輸,而無需提供密碼,這一功能是有安全風險的。因此,在具體實現時,在伺服器與用戶端之間最好採用普通使用者帳號,以免造成較大的破壞。
下面以webgod使用者為例,詳細說明在實現ssh和scp的無密碼登入之前,OpenSSH的用戶端與伺服器雙方事先都需要做哪些準備工作。
1 用戶端配置
在用戶端與伺服器系統中分別建立一個同名為webgod使用者,然後以webgod使用者的身份登入到用戶端系統,使用ssh-keygen命令產生一對密鑰。當系統提示輸入一個與密鑰相關聯的密碼時,直接按下Enter鍵。
產生的兩個密鑰檔案均儲存在webgod使用者主目錄的.ssh子目錄中。其中,id_rsa檔案中儲存的是私玥,id_rsa.pub檔案中儲存的是公開金鑰(用於提交遠程伺服器,解密用戶端傳輸的加密資料)。
採用如下命令,把產生的公開金鑰檔案id_rsa.pub複製到遠程系統的webgod使用者主目錄中。
$ scp ~/.ssh/id_rsa.pub webgod@10.203.131.191:pub_key
2 伺服器配置
在OpenSSH伺服器中,以webgod使用者登入,然後使用cat命令和”>>”重新導向符號,把pub_key檔案中的資料追加到authorized_keys檔案的末尾。
$ cat ~/pub_key >>~/.ssh/authorized_keys
authorized_keys檔案包含所有OpenSSH用戶端系統的公開金鑰列表,如果表中列舉的客戶系統中的webgod使用者仍以同一身份串連到伺服器,則無需提供密碼。
3 樣本
在完成上述全部設定之後,當OpenSSH用戶端的webgod使用者以webgod身份,使用ssh、scp或sftp串連到遠程主機,就不會再提示使用者輸入密碼了。
但這一方法對用戶端的其他使用者無效,即使他們也以webgod使用者的身份登陸到遠程伺服器,仍需提供密碼。