2021-05-12 14:32:11
如何設定 SSH 免密登入
Secure Shell ( SSH )是一種加密網路協定,用於用戶端和伺服器之間的安全連線,並支援各種身份驗證機制。基於密碼的身份驗證和基於公鑰的身份驗證是目前兩種最流行的身份驗證機制。
在本教學中,我們將向您展示如何設定基於 SSH 金鑰的身份驗證以及如何在不輸入密碼的情況下連線到 Linux 伺服器。
設定 SSH 無密碼登入
要在 Linux 中設定 SSH 免密登入,您只需生成公共身份驗證金鑰並將其附加到遠端主機 ~/.ssh/authorized_keys 檔案即可。
以下步驟將介紹設定 SSH 免密登入的過程:
-
檢查現有的 SSH 金鑰對。
在生成新的 SSH 金鑰對之前,首先檢查您的用戶端計算機上是否已有 SSH 金鑰,因為您不想覆蓋現有金鑰。
執行以下 ls 命令以檢視是否存在現有 SSH 金鑰:
ls -al ~/.ssh/id_*.pub
如果存在現有金鑰,您可以使用這些金鑰並跳過下一步或備份舊金鑰並生成新金鑰。
如果您看到 No such file or directory 或 no matches found 意味著您沒有 SSH 金鑰,則可以繼續執行下一步並生成新金鑰。
- 生成新的 SSH 金鑰對。
以下命令將生成一個新的 4096 位 SSH 金鑰對,並將您的電子郵件地址作為註釋:
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
按 Enter 接受則預設檔案位置和檔名:
Enter file in which to save the key (/home/yourusername/.ssh/id_rsa):
接下來,ssh-keygen 工具將要求您鍵入安全密碼。無論您是否想要使用密碼短語都取決於您,如果您選擇使用密碼短語,您將獲得額外的安全保護。在大多數情況下,開發人員和系統管理員使用 SSH 而不使用密碼,因為它們對完全自動化的流程很有用。如果您不想使用密碼短語,請按 Enter
Enter passphrase (empty for no passphrase):
整個互動看起來像這樣:
要確認是否已經生成 SSH 金鑰,您可以使用以下命令列出新的私鑰和公鑰:
ls ~/.ssh/id_*
/home/yourusername/.ssh/id_rsa /home/yourusername/.ssh/id_rsa.pub
-
複製公鑰
現在您已經生成了 SSH 金鑰對,為了能夠在沒有密碼的情況下登入到您的伺服器,您需要將公鑰複製到您要管理的伺服器。
將公鑰複製到伺服器的最簡單方法是使用名為的命令 ssh-copy-id 。在您的本地機器終端型別:
ssh-copy-id remote_username@server_ip_address
系統將提示您輸入 remote_username 的密碼:
remote_username@server_ip_address's password:
使用者通過身份驗證後,公鑰將附加到遠端使用者 authorized_keys 檔案,並且將關閉連線。
如果由於某種原因, ssh-copy-id 本地計算機上沒有該實用程式,則可以使用以下命令複製公鑰:
cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
- 使用 SSH 金鑰登入伺服器
完成上述步驟後,您應該能夠登入到遠端伺服器而不會被提示輸入密碼。
要測試它只是嘗試通過 SSH 登入到您的伺服器:
ssh remote_username@server_ip_address
如果一切順利,您將立即登入。
禁用 SSH 密碼驗證
要為伺服器新增額外的安全層,可以禁用 SSH 的密碼身份驗證。
在禁用 SSH 密碼身份驗證之前,請確保您可以在沒有密碼的情況下登入到伺服器,並且您登入的使用者具有 sudo 許可權。
-
使用具有 sudo 許可權的使用者或 root 使用者,通過 SSH 金鑰登入到遠端伺服器:
ssh sudo_user@server_ip_address
- 開啟 SSH 組態檔 /etc/ssh/sshd_config ,搜尋以下指令並按如下方式進行修改:
PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no
完成後儲存檔案並重新啟動 SSH 服務。
在 Ubuntu 或 Debian 伺服器上,執行以下命令:
sudo systemctl restart ssh
在 CentOS 或 Fedora 伺服器上,執行以下命令:
sudo systemctl restart sshd
結論
在本教學中,您學習了如何設定基於 SSH 金鑰的身份驗證,允許您在不提供使用者密碼的情況下登入到遠端伺服器。您可以將相同的金鑰新增到多個遠端服務。
我們還向您展示了如何禁用 SSH 密碼身份驗證並為您的伺服器新增額外的安全層。
如果您遇到問題或有反饋,請在下面留言。
相關文章