緣由 :

用密碼登入代表有可能會有洩漏或被暴力破解等等的隱憂,所以可以改用非對稱式加密的 ssh 來保證安全,也可以幫助懶人不用每次都要打密碼

作法 :

1. 本機產生 ssh 金鑰對:

如果你是 Unix/Linux 或 macOS,可以直接使用以下指令:

1
ssh-keygen -t rsa -b 4096

如果你是 Ubuntu 或 Debian 又缺少這個工具,則需要先用指令安裝套件:

1
2
sudo apt-get update
sudo apt-get install openssh-client

如果成功會在你的帳戶家目錄下產生 .ssh 目錄,裡面有私鑰 id_rsa 和公鑰 id_rsa.pub,請記住私鑰絕對不要外洩。

2. 推送金鑰到你的機器上:

1
ssh-copy-id <username>@<remote_ip> 

如果成功則會在你的機器的該帳號家目錄下產生 .ssh/authorized_keys
或你也可以手動創建該目錄檔案並貼入公鑰 id_rsa.pub 的內容。
成功後記得確保 .ssh 和 authorized_keys 都是 755 權限。

3. 修改你的機器設定:

先打開設定檔案:

1
sudo vim /etc/ssh/ssfd_config

在裡面找到以下設定並修改其值:

1
2
3
4
port 22  # ssh 監聽端口,你可以改成自己喜歡的,但要注意防火墻不能擋。
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication No # 設為 No 後會禁止用密碼登入

修改完設定後要重啟 ssh 服務:

1
sudo systemctl restart sshd

通常這些做完就可以免密碼用 ssh 連線了。

意外 :

如果你的機器是用雲端伺服器代理商的話,很有可能上面步驟都做完後還是有問題。
Vultr 為例,發現登入時他還是會要你輸入密碼。
使用以下指令檢查:

1
sudo sshd -T |grep pass

發現 passwordauthentication 還是 yes,代表系統並沒有吃到剛剛的設定。
原因是 Vultr 另外有 sshd_config.d/50-cloud-init.conf,裡面就有 PubkeyAuthentication yes 的內容,
而系統在執行時會先讀取 ssfd_config 後才讀取 50-cloud-init.conf,就導致你的設定被覆蓋掉了,解決方法就是直接修改 50-cloud-init.conf 再重啟服務。