SSH 公開金鑰認證 (RSA/ECDSA/Ed25519) 實現免密碼登入,同時大幅提升安全性 (防暴力破解)。本文提供從金鑰對生成、手動分發公鑰、權限設定到 ssh-copy-id 一鍵部署的完整標準化流程。
172.24.253.2,用戶 muye。ssh-keygen -t rsa -b 4096
# 連續 3 次 Enter:預設路徑 ~/.ssh/id_rsa、無密碼 (自動化腳本適用)、確認
# 生成:
# ~/.ssh/id_rsa (私鑰,嚴禁外洩,權限 600)
# ~/.ssh/id_rsa.pub (公鑰,可公開分發)
ssh muye@172.24.253.2 "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
scp ~/.ssh/id_rsa.pub muye@172.24.253.2:~/.ssh/
ssh muye@172.24.253.2 << 'EOF'
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
EOF
關鍵權限:
~/.ssh 目錄:**700** (僅擁有者可讀寫執行)。authorized_keys:**600** (僅擁有者可讀寫)。ssh muye@172.24.253.2
# 應直接進入 B 端 Shell,無需輸入密碼
# 1. 生成金鑰 (若未生成)
ssh-keygen -t rsa -b 4096
# 2. 一鍵複製公鑰至遠端 authorized_keys (自動處理目錄建立、權限、追加)
ssh-copy-id -i ~/.ssh/id_rsa.pub muye@172.24.253.2
# 輸入一次密碼即完成所有設定
ssh-copy-id 會自動:建立 ~/.ssh (700)、建立/追加 authorized_keys (600)、複製公鑰內容。
authorized_keys。
/etc/ssh/sshd_config → PasswordAuthentication no → systemctl restart sshd。PermitRootLogin no 或 prohibit-password (僅允許金鑰)。ssh-keygen -t ed25519,金鑰更短、速度更快、安全性更高。| 現象 | 原因 | 解決 |
|---|---|---|
| 仍提示輸入密碼 | authorized_keys 權限不正確 (非 600) | chmod 600 ~/.ssh/authorized_keys |
| Permission denied (publickey) | .ssh 目錄權限非 700、家目錄權限過寬 (需 700/755) | chmod 700 ~/.ssh; chmod 755 ~ |
| SELinux 拒絕 | ~/.ssh 標籤錯誤 | restorecon -Rv ~/.ssh |
| 金鑰有 passphrase 每次仍需輸入 | 未使用 ssh-agent | eval $(ssh-agent); ssh-add ~/.ssh/id_rsa |