SSH(Secure Shell)預設需使用SSH伺服器端的帳號密碼來登入該台伺服器,只不過若每次都需要重新輸入帳號密碼,實在是一件很麻煩的事情。除了帳號密碼的權限驗證方式外,SSH另外提供了金鑰的權限驗證方式,讓SSH伺服器端能夠使用信任的客戶端自行產生獨特的金鑰號碼,來登入SSH伺服器,這樣一來SSH伺服器端就不需要提供給客戶端任何的帳號密碼了。
將SSH金鑰加入SSH伺服器
首先,SSH客戶端必須要擁有獨特的SSH金鑰,Linux系統產生SSH金鑰的方法可以參考這篇文章的作法。客戶端有了SSH的金鑰後,便可將SSH的公開金鑰(.pub
檔案)交給SSH伺服器來儲存使用。
如何將SSH的公開金鑰交給SSH伺服器?
將SSH的公開金鑰交給SSH伺服器最簡單的作法就是使用ssh-copy-id
指令,直接將公鑰複製給連線的SSH伺服器。指令用法和ssh
指令差不多,如下:
username
是遠端裝置的登入帳號,hostname
是遠端裝置的網路位址(網址或是IP)。
例如:
接著再輸入遠端裝置的帳號登入密碼,完成登入後,便可以將公鑰傳送給遠端的SSH伺服器來儲存。
之後再使用ssh
指令登入該裝置的帳號的話,就不必再帳號登入輸入密碼了!
SSH客戶端的公鑰預設會存在SSH伺服器端該帳號底下家目錄中的.ssh
目錄裡的authorized_keys
檔案,使用純文字格式來儲存,每一行文字就是代表著一組SSH客戶端的公鑰。也就是說,就算SSH客戶端不使用ssh-copy-id
指令先使用帳號密碼登入SSH伺服器提供公鑰,SSH伺服器端也可以直接修改這個檔案,手動將SSH客戶端的公鑰添加進去,這樣一來SSH伺服器端就完全不用提供任何帳號的密碼給SSH客戶端登入了,安全性也會相對提升!
停用SSH伺服器的帳號密碼驗證
用了金鑰驗證後,就可以把SSH的帳號密碼驗證給關閉掉,使其只允許金鑰驗證,避免暴力破解密碼的攻擊。
要開啟或是關閉SSH伺服器的帳號密碼驗證,可以修改/etc/ssh/sshd_config
檔案,將PasswordAuthentication
改為no
(如果要開關金鑰驗證,要修改PubkeyAuthentication
)。
修改完成後,再使用以下指令重啟SSH,就可以套用設定了。