爲什麼要使用SSH密鑰登錄(免密登錄)¶
在Linux服務器管理中,SSH(Secure Shell)是遠程連接的常用工具。傳統的密碼登錄雖然簡單,但存在密碼容易被暴力破解的風險。而SSH密鑰登錄(免密登錄) 通過非對稱加密的方式,安全性更高,且無需每次輸入密碼,使用更便捷。
準備工作¶
- 客戶端:本地電腦(Windows/Linux/macOS),需安裝SSH客戶端(Linux/macOS默認自帶,Windows需安裝Git Bash或PuTTY等工具)。
- 服務器:目標Linux服務器(如CentOS、Ubuntu等),需確保已安裝SSH服務(通常默認安裝,可通過
ssh -V檢查)。
步驟1:生成SSH密鑰對(客戶端)¶
在本地客戶端生成一對密鑰:私鑰(僅本地保存,用於身份驗證)和公鑰(需上傳到服務器)。
- 打開本地終端(Linux/macOS直接用Terminal,Windows用Git Bash),執行命令:
ssh-keygen -t rsa -b 4096
-t rsa:指定密鑰類型爲RSA。-b 4096:密鑰長度(4096位更安全,也可省略,默認2048位)。
-
按提示操作:
- 詢問“Enter file in which to save the key”時,直接回車(默認保存到~/.ssh/id_rsa,~表示用戶家目錄)。
- 詢問“Enter passphrase”時,可留空(否則每次連接需輸入私鑰密碼,建議初學者留空,後續用密碼更方便)。 -
生成成功後,會在
~/.ssh目錄下生成兩個文件:
-id_rsa:私鑰(需嚴格保密,權限建議設爲600)。
-id_rsa.pub:公鑰(可公開,用於上傳到服務器)。
步驟2:將公鑰複製到服務器¶
需將客戶端的公鑰內容上傳到服務器的 ~/.ssh/authorized_keys 文件中(服務器用該文件存儲允許登錄的公鑰)。
情況1:客戶端爲Linux/macOS(推薦,自動操作)¶
執行以下命令(替換 用戶名 和 服務器IP):
ssh-copy-id -i ~/.ssh/id_rsa.pub 用戶名@服務器IP
-i:指定公鑰文件路徑(默認~/.ssh/id_rsa.pub)。- 輸入服務器密碼後,公鑰會自動複製到服務器的
~/.ssh/authorized_keys,並自動設置權限。
情況2:客戶端爲Windows(手動複製)¶
- 打開本地公鑰文件
id_rsa.pub(用記事本或文本編輯器打開),複製全部內容。 - 登錄服務器(通過密碼),在終端執行:
mkdir -p ~/.ssh # 創建.ssh目錄(若不存在)
cd ~/.ssh
echo "公鑰內容" >> authorized_keys # 粘貼剛纔複製的公鑰
chmod 600 authorized_keys # 設置公鑰文件權限(關鍵!否則SSH無法讀取)
chmod 700 ~/.ssh # 設置.ssh目錄權限(避免被其他用戶修改)
步驟3:服務器端配置(確保允許密鑰登錄)¶
需確保服務器的SSH服務(sshd)允許公鑰登錄,並禁用密碼登錄(可選)。
- 編輯SSH配置文件
sshd_config:
sudo vim /etc/ssh/sshd_config
-
檢查/修改以下關鍵選項(確保未被註釋,且值爲
yes):
-PubkeyAuthentication yes:允許公鑰認證(默認開啓)。
-AuthorizedKeysFile .ssh/authorized_keys:指定公鑰文件路徑(默認值正確,無需修改)。
- 若需禁用密碼登錄(僅用密鑰登錄),修改:PasswordAuthentication no(建議先保留yes,確保密碼登錄可用,後續再改)。 -
保存文件並重啓SSH服務:
sudo systemctl restart sshd # CentOS/RHEL
# 或
sudo systemctl restart ssh # Ubuntu/Debian
步驟4:客戶端連接測試(免密登錄)¶
配置完成後,本地客戶端無需密碼即可連接服務器:
- 直接執行連接命令:
ssh 用戶名@服務器IP
- 首次連接時,會提示“Are you sure you want to continue connecting (yes/no)?”,輸入
yes確認。 - 無需再輸入密碼,直接登錄成功!
常見問題及解決方法¶
-
權限錯誤:
- 服務器端authorized_keys權限應爲600(chmod 600 ~/.ssh/authorized_keys),否則報錯“Permission denied”。
- 客戶端私鑰id_rsa權限應爲600(chmod 600 ~/.ssh/id_rsa),否則SSH會提示“Bad permissions on private key file”。 -
連接時仍需密碼:
- 檢查服務器端sshd_config中PubkeyAuthentication是否爲yes。
- 確認公鑰已正確複製到authorized_keys,且內容無多餘空格/換行。 -
忘記私鑰密碼:
- 若生成密鑰時設置了密碼,需在連接時輸入;若未設置(步驟1留空),則無密碼。
- 若需重置密鑰,刪除~/.ssh/id_rsa和id_rsa.pub,重新執行步驟1生成。
總結¶
通過SSH密鑰登錄,既避免了密碼泄露風險,又簡化了登錄流程。核心是“生成密鑰對→上傳公鑰到服務器→配置服務器允許公鑰登錄”,重點注意文件權限和配置文件正確性。建議先在本地練習,再逐步遷移到生產環境。
提示:若需完全禁用密碼登錄,可在 sshd_config 中設 PasswordAuthentication no,並重啓SSH服務。