一般 ssh 會使用帳號跟密碼的方式登入遠端主機,這方式雖然方便但是卻有風險
只要其他人知道帳號跟密碼一樣就可以登入主機進行任何動作,所以可以使用 key 來登入,只要沒有這個 key 就不能登入主機,這樣也比帳號密碼安全。
而其實它還有另一種用途,如果要用 rsync 備份或更新其他主機的內容也可以用這個方式,就不用一台一台主機輸入密碼才能傳輸檔案。
# 1. 製作 ssh key
ssh-keygen -t rsa
或 ssh-keygen -d (dsa)
=> 產生出 id_rsa, id_rsa.pub 在使用者目錄中.ssh 資料夾裡面
製作時會問 Enter passphrase (empty for no passphrase): 此處直接 enter 跳過,下次才不會詢問密碼
id_rsa
是私鑰 private key
id_rsa.pub
是公鑰 public key
# 2. 讓遠端登入到其他遠端主機
假如現在你有 A 跟 B 主機,A 主機照上方的方式做出了 ssh 金鑰
主要要讓 A 主機 可以不用使用密碼用 key 登入到 B 主機 進行操作
那就要將 A 主機 的 " 公鑰 " 上傳到 B 主機 中才能讓 A 主機免密碼登入到 B 主機,只要在 A 主機輸入以下指令
ssh-copy-id -i $HOME/.ssh/id_rsa.pub (B 主機)
上方紅字的部分改為主機 IP 或名稱
大致上主機回應如下方:
# ssh-copy-id -i $HOME/.ssh/id_rsa.pub (主機名稱)
The authenticity of host '(主機名稱) (IP)' can’t be established.
RSA key fingerprint is 金鑰指紋.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '(主機名稱),(IP)' (RSA) to the list of known hosts.
Now try logging into the machine, with "ssh '(主機名稱)'", and check in:
.ssh/authorized_keys
to make sure we haven’t added extra keys that you weren’t expecting.
※(主機名稱),(IP) 部分會依金鑰及主機名稱 IP 而改變
這個時候用 ssh 連線嘗試看看有沒有匯入成功
ssh root@主機名稱
如果有成功匯入金鑰的話不用打密碼就可以連線進去了
# 3. 本地電腦免密碼登入遠端主機
當我們用 windows 要遠端控制主機時大部分都會使用到 PieTTY 或 PuTTY 這兩款 SSH 連線軟體,平常設定都是使用帳號跟密碼做登入,如果要用免密碼登入增加安全性就要使用下方的方式
(1) 準備好 PieTTY 或 PuTTY (觀眾:廢話 (打丁丁
(2) 將遠端主機使用者的 公鑰 重新命名成 authorized_keys
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys |
(3) 將 id_rsa 私鑰 private key 下載到 windows 上
並下載 PuTTYgen ,開啟 PuTTYgen 上方有個 "Conversions" 選擇 "Import key" 選擇你從主機下載下來的 id_rsa 私鑰,選擇後點擊下方會有個 "Save private key",
軟體會問你說 Are you sure you want to save this key without passphrase to protext it?
,主要的意思是說 "你確定要儲存這個 key 並不使用任何密碼保護它?"
選擇 yes 輸出 ppk 檔,ppk 檔是給 PuTTY or PieTTY 使用的,給 PuTTY or PieTTY ppk 檔路徑就可以免密碼登入囉~