SSH 免密登入基於非對稱加密(RSA/DSA)。客戶端持有私鑰,目標機器存放對應公鑰於 ~/.ssh/authorized_keys,驗證通過後無需密碼即可登入。
ssh-keygen -t rsa(一路 Enter 使用預設值),產生 id_rsa(私鑰)與 id_rsa.pub(公鑰)~/.ssh/ 目錄,並追加至 authorized_keys:
scp ~/.ssh/id_rsa.pub user@B:~/.ssh/ ssh user@B "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"
ssh 192.168.20.60 即可免密登入ssh-keygen -t rsa 生成密鑰對id_rsa.pub)收集到一台機器,合併為一個 authorized_keys 檔案~/.ssh/authorized_keyschmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
755(非 777),否則驗證失敗實測遇到 Permission denied (publickey,gssapi-with-mic,password) 錯誤,最終發現是家目錄權限為 777 導致。SSH 為安全考量,嚴格要求:
| 路徑 | 必要權限 | 說明 |
|---|---|---|
~/.ssh/ | 700 (drwx------) | 僅擁有者可讀寫執行 |
~/.ssh/authorized_keys | 600 (-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_hostsauthorized_keys 格式(每行一個公鑰)、SSH 服務端配置 PubkeyAuthentication yesrestorecon -Rv ~/.ssh 恢復安全上下文