SSH 金鑰是個好主意
「密碼」是很糟糕認證方式!密碼需注意不可丟失,且使用上也相對麻煩。值得慶幸的是,SSH 金鑰可讓遠端連線更加輕鬆,讓我們從透過 ssh-keygen 製作金鑰來開始今天的介紹吧!
ssh-keygen
指令會詢問你保存金鑰的位置以及使用的檔案名稱,雖說這並非必要的動作,但我建議為每一個你要連接的伺服器製作一個 keyrepair,你也可以使用密碼來保護你的密鑰。接著準備複製你想要造訪的遠端伺服器的公開金鑰,這步驟可透過 Linux 提供的實用程序「ssh-copy-id」來進行,即可將密鑰透過下方指令將公開金鑰傳送至遠端伺服器:
ssh-copy-id -i /path/to/private/key user@hostname
你將被指示輸入平時連接至遠端伺服器時所使用的密碼,這將會把 /path/to/public/key 中的內容附加到遠端伺服器的 ~/.ssh/authorized_keys 檔案中。
接著依照以往的方式,試著從你的遠端伺服器中登入,你可能會需要指定所使用的金鑰,如下:
ssh -i /path/to/private/key user@hostname
若金鑰成功的複製了,當你登入遠端伺服器時,你不會需要再次輸入密碼即可登入!
你也可以選擇在遠端伺服器中停用密碼驗證,如果你有可透過金鑰登入的 root/sudo 用戶 (而且你有確實備份好這些金鑰),你可以安全地停用密碼驗證,並僅允許使用金鑰的驗證。
以 root 方式編輯 /etc/ssh/sshd_config 並編輯或新增以下指令:
PasswordAuthentication no
保存並重整 sshd。開啟一個新的終端機並試著透過 SSH 再次進入遠端伺服器中,若一切都正常顯示就表示你成功了!
另外,我喜歡把我的遠端伺服器加至 ~/.ssh/config 檔案中。如下:
.... Host server1 server1.example.com HostName server1.example.com User superawesomesshuser Port 4242 IdentityFile /path/to/private/key ....
我可以輸入 “ssh server1” 或 “ssh server1.example.com”,這可大幅的減少我進入伺服器中所需的時間,若同事們對於同一個伺服器使用不同的名稱,我可將多個 host 名稱包含在一起,仍可進入同一個伺服器中。
我也建議將你的 SSH 金鑰與 ~/.ssh/config 保存在一個非公開的 GIT repo 中,並將你的 dotfiles 保存在版本管控內,可使後續的移動與管理更加簡單!如果想了解dotfiles的相關應用,我真心推薦 Atlassian 所提供的 dotfiles 指南!
我要留言