免密碼登入 Linux 的正確方式

筆者習慣替每一個主機產生一個沒有密碼的金鑰(不然要使用時還是需要輸入密碼),和其他金鑰分開(例如 github 的金鑰還是需要輸入密碼), 然後設定 SSH 登入設定檔,這樣連線到特定主機時就可以自動套用該金鑰,達成免密碼登入了!

產生 ssh 金鑰,指定名稱為 id_ed25519_server_001 ,email 為 a@ruyut.com (可以省略)
要輸入兩次密碼,都是直接按下 Enter 跳過
    
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_server_001 -C "a@ruyut.com"
Generating public/private ed25519 key pair.
Enter passphrase for "/Users/ruyut/.ssh/id_ed25519_server_001" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/ruyut/.ssh/id_ed25519_metis_home
Your public key has been saved in /Users/ruyut/.ssh/id_ed25519_metis_home.pub
The key fingerprint is:
SHA256:YyyYTzzzzMptff200+wwwTO112mKuaFXkxRlPPDatwA a@ruyut.com
The key's randomart image is:
+--[ED25519 256]--+
|         .+o     |
|         .oo     |
|         E...    |
|         .+.     |
|  . .   S.+oo.   |
|   *   o @ =o .  |
|  . * ..+.@  .   |
|..oo +o+o+.o     |
|.==..o.ooo+o.    |
+----[SHA256]-----+
    

到 ~/.ssh 資料夾下面就會看到剛剛建立的金鑰了
    
cd ~/.ssh
~/.ssh % ls
config
id_ed25519_server_001
id_ed25519_server_001.pub
id_ed25519
id_ed25519.pub
    

使用 ssh-copy-id 指令直接把公鑰加入至目標主機的 ~/.ssh/config 中,需要把 ruyut@172.16.160.128 替換為自己的主機登入資訊:
    
ssh-copy-id -i ~/.ssh/id_ed25519_server_001.pub ruyut@172.16.160.128
    

現在已經可以免密碼登入了,只是每次都要指定金鑰很麻煩,可以手動編輯 ssh 連線設定檔,可以自訂連線的別名,也可以直接指定自動套用的金鑰:
    
vi ~/.ssh/config
    

設定主機別名為 server_001 指定 IP 是 172.16.160.128 使用者 ruyut 連接埠 22 使用金鑰檔案 ~/.ssh/id_ed25519_server_001
    
Host server_001
  HostName 172.16.160.128
  user ruyut
  Port 22
  IdentityFile ~/.ssh/id_ed25519_server_001
    

這樣下次就可以直接這樣連進去了:
    
ssh server_001
    

留言