Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux SSH 免密碼登入完整配置指南與權限陷阱避坑

編輯:Linux 系統常見問題解答

核心原理

SSH 免密登入基於非對稱加密(RSA/DSA)。客戶端持有私鑰,目標機器存放對應公鑰於 ~/.ssh/authorized_keys,驗證通過後無需密碼即可登入。

單向免密登入(A → B)

  1. 登入客戶端 A(192.168.20.59)
  2. 生成密鑰對:ssh-keygen -t rsa(一路 Enter 使用預設值),產生 id_rsa(私鑰)與 id_rsa.pub(公鑰)
  3. 將公鑰複製到目標機 B(192.168.20.60)的 ~/.ssh/ 目錄,並追加至 authorized_keys:
    scp ~/.ssh/id_rsa.pub user@B:~/.ssh/
    ssh user@B "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"
    
  4. 完成!在 A 執行 ssh 192.168.20.60 即可免密登入

雙向免密登入(叢集常用)

  1. 所有節點均執行 ssh-keygen -t rsa 生成密鑰對
  2. 將所有節點的公鑰(id_rsa.pub)收集到一台機器,合併為一個 authorized_keys 檔案
  3. 將此檔案分發到所有節點的 ~/.ssh/authorized_keys
  4. 統一設置權限(關鍵步驟!):
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    
  5. 確保家目錄權限為 755(非 777),否則驗證失敗

權限陷阱:為什麼配置正確卻仍失敗?

實測遇到 Permission denied (publickey,gssapi-with-mic,password) 錯誤,最終發現是家目錄權限為 777 導致。SSH 為安全考量,嚴格要求:

路徑必要權限說明
~/.ssh/700 (drwx------)僅擁有者可讀寫執行
~/.ssh/authorized_keys600 (-rw-------)僅擁有者可讀寫
~/ (家目錄)755 (drwxr-xr-x)不可為 777,否則 SSH 拒絕公鑰驗證

多節點批量配置腳本思路

# 假設節點 h1,h2,h3 用戶均為 hadoop
# 1. 收集所有公鑰
scp hadoop@h1:~/.ssh/id_rsa.pub ./h1.pub
scp hadoop@h2:~/.ssh/id_rsa.pub ./h2.pub
scp hadoop@h3:~/.ssh/id_rsa.pub ./h3.pub
cat *.pub > authorized_keys

# 2. 分發並設置權限
for host in h1 h2 h3; do
    scp authorized_keys hadoop@$host:~/.ssh/
    ssh hadoop@$host "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && chmod 755 ~"
done

常見問題排查

  • 首次連線提示主機真實性無法確認:輸入 yes 將主機加入 known_hosts
  • 仍提示輸入密碼:檢查權限、authorized_keys 格式(每行一個公鑰)、SSH 服務端配置 PubkeyAuthentication yes
  • SELinux 環境:執行 restorecon -Rv ~/.ssh 恢復安全上下文
Copyright © Windows教程網 All Rights Reserved