在講解之前,我們先來瞭解一下為何我們需要這種方式登入,原因有很多,其中我們最常遇到的情況,例如:不想每次登入時輸入密碼、省時、不想客戶端使用者知道服務端密碼、自動化流程需要輸入密碼等等,除上述外還有很多其它原因需要使用這種登入方式。
使用ssh-keygen免密碼方式登入伺服器,我們必須瞭解一下這種方式的實現思想,有了概念後,學習起來會更容易理解當中原理,日後可應用在其它地方,對工作亦有所幫助。
公鑰認証的思路
對信息的加密和解密採用不同的鑰匙(key),這對鑰匙分別稱作私鑰(private key)和公鑰(public key),公鑰會存放在服務端(被遠端登入的設備)上,而私鑰會存放在客戶端(發出登入請求的設備)上。
當客戶端向服務端發出建立安全連接的請求時,首先會發送本機上的公鑰,當服務端接收到公鑰後會驗証是否在允許列表上,如是,服務端會發送一個經過公鑰加密的信息給客戶端,這個信息只能使用私鑰解密,客戶端將解密後的信息發還給服務端,服務端驗証正確後確認客戶端是可信任的,便會建立一條安全的信息通道。
使用這種方式客戶端不需要將私鑰向外公開,便可達到校驗目的,並且私鑰是不能通過公鑰反推出來,從而避免了網路竊聽可能造成的密碼泄露。所以,客戶端必須小心保管自己的私鑰,以免被駭客竊取,如果發生被駭客盜取私鑰的情況,必須盡快將所有服務端上受信任的公鑰列表。
實現流程
- 客戶端生成鑰匙
$ ssh-keygen -t rsa
- SSH登入服務端建立存放SSH信息的文件夾
$ ssh webmaster@xxx.xxx.xxx.xxx mkdir -p .ssh
- 將客戶端的公鑰透過SSH加入至服務端的允許登入設備列表上,允許登入設備列表命名為authorized_keys
$ cat ssh/id_rsa.pub | ssh webmaster@xxx.xxx.xxx.xxx 'cat >> .ssh/authorized_keys'
- SSH登入服務端
$ ssh webmaster@xxx.xxx.xxx.xxx
- 修改服務端上允許登入設備列表的權限,注意權限必須要為644
$ chmod 644 .ssh/authorized_keys
- 退出服務器端
$ exit
- 重覆第(5)步驟驗証登入服務端是否仍需要輸入登入密碼
- 如失敗請檢查authorized_keys檔案權限和名稱是否正確
如讀者有任何問題,歡迎與我交流。
鏈結到這頁!