免密碼登入ssh

相信大家有類似的經驗,在使用 SSH 登入,往往都要輸入密碼,但是常用主機如果設置的是亂碼或者複雜性密碼,每次都要輸入一次頗為不便
又或者有些情況下想要免密碼登入 (便利性、rsync、script操作) ,這時候透過金鑰達成免密碼登入會便利很多!

那以下步驟以機器A、機器B來稱呼兩台主機:
機器 A (Client) 為你正在操作的電腦,透過終端機操作 SSH 指令
機器 B (Server) 為你使用 SSH 登入的遠端的主機

步驟一:產生公鑰

首先,你需要在機器 A (Client) 產生給機器B (Server) 主機使用的金鑰組

$ ssh-keygen -t rsa


金鑰組則會有兩個檔案:公鑰 (public key) 、私鑰 (private key)
一般來說,公鑰 (public key) 的路徑及檔名會像是這樣:
~/.ssh/id_rsa.pub

而私鑰 (private key) 的則是會像是這樣:
~/.ssh/id_rsa

這些檔案因為安全性當然不要外流。

步驟二:複製公鑰至主機,加入主機的信任清單中

將剛剛產生的 public key (id_rsa.pub) 透過 SCP 指令拷貝到機器 B (Server) 中,加入你所擁有帳號之下的 .ssh/authorized_keys 中

$ scp -P 'server-Port' ~/.ssh/id_rsa.pub 'server-User@server-IP':~/id_rsa.pub
範例:
scp -P 2222 ~/.ssh/id_rsa.pub root@localhost:~/id_rsa.pub

之後在 SSH 進入你的主機,在主機內輸入

cat id_rsa.pub >> .ssh/authorized_keys

如果出現沒有 authorized_keys 的話:
touch ~/.ssh/authorized_keys

chmod 600 .ssh/authorized_keys
移動至目標位置然後改到對應的權限即可

註1:這邊要確認你的主機端有安裝 SSH 以及 SCP 指令,有遇過 iOS 10 Jailbreak 裝置沒有預設安裝的狀況XD
註2:如果機器 B (Server) 你所擁有的帳號沒有 .ssh/authorized_keys 的路徑,在你複製時會直接顯示錯誤,解決方法是先透過 SSH 登入至 機器 B,並執行開創.ssh資料夾的動作 mkdir .ssh 便會產生相關路徑。
註3:偷懶法:ssh-copy-id -i root@ip_address

延伸應用:

  1. 步驟一產生的金鑰如果可供任意寫入頗為危險,因此有些人會改掉相關檔案的權限

$ ssh 'server-User@server-IP'
$ chmod 400 ~/.ssh/authorized_keys #關閉存取

如果要打開存取用下列指令就可以了:
$ chmod 600 ~/.ssh/authorized_keys #可供寫入

參考來源:LinXblog [超易] 兩行指令搞定 Linux SSH登入免密碼

  1. 關閉主機密碼登入
    因為安全性,有些人會將主機的密碼登入功能關閉,主機僅會比對金鑰以供登入
    而要達成這項功能,只允許使用金鑰來做登入,可以修改以下這個檔案的兩個參數:

$ vim /etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no
設為對應的值就可以完成了

參考來源:Tsung’s Blog ssh keygen 免輸入密碼

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料