非對稱加密:客戶端持有私鑰(id_rsa),伺服器存放公鑰(authorized_keys)。驗證時客戶端用私鑰簽名,伺服器用公鑰驗證,無需傳輸密碼。
/etc/ssh/sshd_configPubkeyAuthentication yes
RSAAuthentication yes # SSH-1 相容,新版可省略
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 建議關閉密碼登入(驗證金鑰無誤後)
PermitRootLogin prohibit-password # 僅允許金鑰登入 root
修改後:systemctl reload sshd
ssh-keygen -t rsa -b 4096 -C "user@host-$(date +%F)"
# -t rsa 加密類型
# -b 4096 金鑰長度(建議 ≥2048,4096 更安全)
# -C 註解,便於辨識
交互提示:
Enter file in which to save the key (/home/user/.ssh/id_rsa): → 直接 Enter 使用預設路徑Enter passphrase (empty for no passphrase): → 建議設定強密語保護私鑰,或留空實現全自動化產出:
~/.ssh/id_rsa:私鑰(權限 600,嚴禁洩露)~/.ssh/id_rsa.pub:公鑰(可公開分發)# 方法 A:ssh-copy-id(推薦,自動處理目錄權限)
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
# 方法 B:手動傳輸
cat ~/.ssh/id_rsa.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
ssh user@server # 應直接進入,無需輸入密碼
puttygen.exeid_rsa.ppk(PuTTY 專用格式)將複製的公鑰內容追加至 ~/.ssh/authorized_keys(同方案一)。
user@serverid_rsa.ppk# 伺服器生成
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_server
mv ~/.ssh/id_rsa_server.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 將私鑰 id_rsa_server 下載到 Windows
# PuTTYgen → Conversions → Import Key → 選 id_rsa_server → Save private key → id_rsa_server.ppk
# PuTTY 配置同方案二
# 伺服器端
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R user:user ~/.ssh
# 客戶端
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
錯誤提示 Permissions 0755 for '...' are too open 即為權限過寬,嚴格執行上述 chmod 600 即可解決。
ed25519 替代 RSA:ssh-keygen -t ed25519,更短、更快、更安全ssh-agent 管理私鑰解密,避免重複輸入 passphrase~/.ssh/config 別名與參數:Host myserver\n HostName 1.2.3.4\n User admin\n IdentityFile ~/.ssh/id_rsa_ed25519