萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux SSH RSA 免密碼登入完整配置:金鑰對生成、公鑰分發、authorized_keys 權限與 ssh-copy-id 一鍵部署

SSH 公開金鑰認證 (RSA/ECDSA/Ed25519) 實現免密碼登入,同時大幅提升安全性 (防暴力破解)。本文提供從金鑰對生成、手動分發公鑰、權限設定到 ssh-copy-id 一鍵部署的完整標準化流程。

角色定義

  • A (Client/控制端):發起連線的本地主機。
  • B (Server/被控端):目標遠端伺服器,IP 假設 172.24.253.2,用戶 muye。

方法一:標準手動部署 (教學用,理解原理)

在 A 端生成 RSA 金鑰對

ssh-keygen -t rsa -b 4096
# 連續 3 次 Enter:預設路徑 ~/.ssh/id_rsa、無密碼 (自動化腳本適用)、確認
# 生成:
# ~/.ssh/id_rsa       (私鑰,嚴禁外洩,權限 600)
# ~/.ssh/id_rsa.pub   (公鑰,可公開分發)

在 B 端準備 .ssh 目錄與授權檔

ssh muye@172.24.253.2 "mkdir -p ~/.ssh && chmod 700 ~/.ssh"

傳送公鑰至 B 端

scp ~/.ssh/id_rsa.pub muye@172.24.253.2:~/.ssh/

在 B 端建立/追加 authorized_keys 並設權限

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 拒絕使用該金鑰。

驗證免密登入

ssh muye@172.24.253.2
# 應直接進入 B 端 Shell,無需輸入密碼

方法二:ssh-copy-id 一鍵部署 (生產環境推薦)

# 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)、複製公鑰內容。

原理圖解:鑰匙與鎖的比喻

  • 私鑰 (id_rsa) = 實體鑰匙,妥善保管,可設定密碼保護 (passphrase)。
  • 公鑰 (id_rsa.pub) = 鎖頭,部署到目標伺服器 authorized_keys。
  • 持有私鑰者 (知悉 passphrase) 即可開鎖登入;私鑰外洩若有 passphrase 仍安全。

SSH 金鑰認證流程圖

進階安全加固建議

  • 禁用密碼認證:編輯 /etc/ssh/sshd_config → PasswordAuthentication no → systemctl restart sshd。
  • 禁用 Root 登入:PermitRootLogin no 或 prohibit-password (僅允許金鑰)。
  • 更換預設埠 22:減少自動掃描噪音。
  • 使用 Ed25519 取代 RSA:ssh-keygen -t ed25519,金鑰更短、速度更快、安全性更高。
  • 啟用 Fail2Ban:防禦殘留密碼認證的暴力嘗試。

常見問題排查

總結:ssh-keygen -t ed25519 + ssh-copy-id 是現代標準免密部署流程;嚴格權限 (700/600) 為核心前提;配合禁用密碼認證與 Ed25519,構建企業級 SSH 安全基線。

copyright © 萬盛學電腦網 all rights reserved
現象原因解決
仍提示輸入密碼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-agenteval $(ssh-agent); ssh-add ~/.ssh/id_rsa