隨著雲端主機或者是Container的普及,一個工程師可能會同時管理很多虛擬機或Container。常遇到忘記遠端主機密碼,或者是每次要登入就要一直輸入密碼的痛點,利用 ssh key 登入的方式,登入驗證是採用本機 ssh key進行驗證,少去了打密碼的行為,就可以大大減少忘記密碼的問題。接下來就一步一步的操作給各位看,如何能夠用 ssh key來登入遠端主機。
想解決的問題與優點
- 避免忘記遠端帳號的密碼,而且使用 ssh key 不會輸入密碼比較安全
- 對於會撰寫 shell script 的人,由於不用處理與遠端主機輸入密碼的互動,有利於撰寫、執行腳本
本機建立 ssh key
使用 ssh-keygen 指令來產生 ssh key
# 通常我們會把 ssh key 產生在本機的家目錄下
cd ~/.ssh
# 利用 ssh-keygen 指令產生 ssh key 並且用 -f 來指定檔案名稱
ssh-keygen -f sshkey-demo
產生的過程中,系統會問是否要輸入 passphrase,意思是使用這把ssh key時需不需要輸入密碼,通常我們會直接使用 empty 就是按下 enter鍵,連續按兩次。
透過 ls 發現,這個指令一定會產生兩個檔案,一個是 私鑰(private key) 這裡是 sshkey-demo這個檔案,另一個是公鑰(public key) 這裡是 sshkey-demo.pub
將本機的ssh key 複製到遠端主機
將剛剛產生的 sshkey-demo 的公鑰利用指令傳到遠端主機
# 指令是 ssh-copy-id -i {指定檔案} {登入的帳號}@{遠端的主機IP or domain}
ssh-copy-id -i ~/.ssh/sshkey-demo parallels@10.211.55.7
如果是第一次連到遠端主機,系統會要你確認是否要連到遠端主機,請輸入 yes。最後輸入該主機的登入密碼,這樣就完成了
利用 ssh key 登入遠端主機
往後要登入該遠端主機都帶著 sshkey-demo 這把公鑰就不用再輸入密碼了
查看遠端主機做了什麼事情
ssh-copy-id 到底對遠端主機做什麼事情呢?首先我們先登入遠端主機,並且利用 ls 指令 來看 ~/.ssh 這個目錄底下,我們發現多了一個 authorized_keys 的檔案
ls ~/.ssh
cat ~/.ssh/authorized_keys
利用 cat 指令來看這個 authorized_keys 的內容,可以發現這個其實是我們在本機利用 ssh-keygen 產生的兩個檔案的公鑰。因此我們知道利用 ssh-copy-id就是把本機的公鑰複製到遠端主機存留。
結語
利用 ssh key的方式來登入遠端主機,安全性會比每一次登入都要輸入密碼還要來的高上許多喔!