爲什麼要使用SSH密鑰登錄(免密登錄)

在Linux服務器管理中,SSH(Secure Shell)是遠程連接的常用工具。傳統的密碼登錄雖然簡單,但存在密碼容易被暴力破解的風險。而SSH密鑰登錄(免密登錄) 通過非對稱加密的方式,安全性更高,且無需每次輸入密碼,使用更便捷。

準備工作

  • 客戶端:本地電腦(Windows/Linux/macOS),需安裝SSH客戶端(Linux/macOS默認自帶,Windows需安裝Git Bash或PuTTY等工具)。
  • 服務器:目標Linux服務器(如CentOS、Ubuntu等),需確保已安裝SSH服務(通常默認安裝,可通過 ssh -V 檢查)。

步驟1:生成SSH密鑰對(客戶端)

在本地客戶端生成一對密鑰:私鑰(僅本地保存,用於身份驗證)和公鑰(需上傳到服務器)。

  1. 打開本地終端(Linux/macOS直接用Terminal,Windows用Git Bash),執行命令:
   ssh-keygen -t rsa -b 4096
  • -t rsa:指定密鑰類型爲RSA。
  • -b 4096:密鑰長度(4096位更安全,也可省略,默認2048位)。
  1. 按提示操作:
    - 詢問“Enter file in which to save the key”時,直接回車(默認保存到 ~/.ssh/id_rsa~ 表示用戶家目錄)。
    - 詢問“Enter passphrase”時,可留空(否則每次連接需輸入私鑰密碼,建議初學者留空,後續用密碼更方便)。

  2. 生成成功後,會在 ~/.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(手動複製)

  1. 打開本地公鑰文件 id_rsa.pub(用記事本或文本編輯器打開),複製全部內容。
  2. 登錄服務器(通過密碼),在終端執行:
   mkdir -p ~/.ssh  # 創建.ssh目錄(若不存在)
   cd ~/.ssh
   echo "公鑰內容" >> authorized_keys  # 粘貼剛纔複製的公鑰
   chmod 600 authorized_keys  # 設置公鑰文件權限(關鍵!否則SSH無法讀取)
   chmod 700 ~/.ssh  # 設置.ssh目錄權限(避免被其他用戶修改)

步驟3:服務器端配置(確保允許密鑰登錄)

需確保服務器的SSH服務(sshd)允許公鑰登錄,並禁用密碼登錄(可選)。

  1. 編輯SSH配置文件 sshd_config
   sudo vim /etc/ssh/sshd_config
  1. 檢查/修改以下關鍵選項(確保未被註釋,且值爲 yes):
    - PubkeyAuthentication yes:允許公鑰認證(默認開啓)。
    - AuthorizedKeysFile .ssh/authorized_keys:指定公鑰文件路徑(默認值正確,無需修改)。
    - 若需禁用密碼登錄(僅用密鑰登錄),修改:PasswordAuthentication no(建議先保留 yes,確保密碼登錄可用,後續再改)。

  2. 保存文件並重啓SSH服務:

   sudo systemctl restart sshd  # CentOS/RHEL
   # 或
   sudo systemctl restart ssh  # Ubuntu/Debian

步驟4:客戶端連接測試(免密登錄)

配置完成後,本地客戶端無需密碼即可連接服務器:

  1. 直接執行連接命令:
   ssh 用戶名@服務器IP
  • 首次連接時,會提示“Are you sure you want to continue connecting (yes/no)?”,輸入 yes 確認。
  • 無需再輸入密碼,直接登錄成功!

常見問題及解決方法

  1. 權限錯誤
    - 服務器端 authorized_keys 權限應爲 600chmod 600 ~/.ssh/authorized_keys),否則報錯“Permission denied”。
    - 客戶端私鑰 id_rsa 權限應爲 600chmod 600 ~/.ssh/id_rsa),否則SSH會提示“Bad permissions on private key file”。

  2. 連接時仍需密碼
    - 檢查服務器端 sshd_configPubkeyAuthentication 是否爲 yes
    - 確認公鑰已正確複製到 authorized_keys,且內容無多餘空格/換行。

  3. 忘記私鑰密碼
    - 若生成密鑰時設置了密碼,需在連接時輸入;若未設置(步驟1留空),則無密碼。
    - 若需重置密鑰,刪除 ~/.ssh/id_rsaid_rsa.pub,重新執行步驟1生成。

總結

通過SSH密鑰登錄,既避免了密碼泄露風險,又簡化了登錄流程。核心是“生成密鑰對→上傳公鑰到服務器→配置服務器允許公鑰登錄”,重點注意文件權限和配置文件正確性。建議先在本地練習,再逐步遷移到生產環境。

提示:若需完全禁用密碼登錄,可在 sshd_config 中設 PasswordAuthentication no,並重啓SSH服務。

小夜