
SSH 金鑰輪替與安全設定:守護你的伺服器
在每天頻繁登入遠端伺服器的過程中,你是否遇過「金鑰外洩」或「忘記伺服器位址」的窘境?本文將手把手教你建立一套完整的 SSH 金鑰輪替與安全設定體系,讓遠端協作既安全又高效。
📋 实验室验证报告
SSH 金鑰輪替與安全設定:守護你的伺服器
在每天頻繁登入遠端伺服器的過程中,你是否遇過「金鑰外洩」或「忘記伺服器位址」的窘境?本文將手把手教你建立一套完整的 SSH 金鑰輪替與安全設定體系,讓遠端協作既安全又高效。
為什麼要做金鑰輪替?
**風險情境**:
- 員工離職但未及時停用其 SSH 金鑰
- 筆記型電腦遭竊,金鑰未啟用加密保護
- 金鑰在多個管道外洩(GitHub 公開倉庫、即時通訊工具傳輸)
**輪替頻率建議**:每 90 天輪換一次;如果團隊成員變動頻繁,可縮短至 30 天。
完整操作流程
第一步:產生新型金鑰(推薦 Ed25519)
# 產生 Ed25519 金鑰(更安全、更小)
ssh-keygen -t ed25519 -C "your-email@example.com"
# 設定強密碼保護私鑰
# 建議:12 字元以上,含大小寫+數字+符號
**關鍵點**:Ed25519 比 RSA 更安全且效能更好,金鑰長度僅 256 位元,但安全強度等效於 3072 位元 RSA。
第二步:部署公鑰到伺服器
# 自動部署(推薦)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
# 手動方式(備用)
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
第三步:設定 .ssh/config 檔案
# 新增 ~/.ssh/config
Host production
HostName 192.168.1.100
User deploy
IdentityFile ~/.ssh/id_ed25519_prod
IdentityFile ~/.ssh/id_ed25519_personal
Host staging
HostName 10.0.0.50
User deploy
IdentityFile ~/.ssh/id_ed25519_staging
ForwardAgent yes # 注意:生產環境建議關閉
**檢查清單**:
- [ ] 每個伺服器對應獨立金鑰組
- [ ] 生產環境關閉 ForwardAgent
- [ ] 設定合理的檔案權限(600 私鑰,644 公鑰)
何時不應使用此方法?
1. **臨時測試環境**:使用臨時金鑰,無需持久化設定
2. **公共伺服器**:如 GitHub、雲端廠商控制台,使用 OAuth/雲端金鑰而非 SSH
3. **無伺服器權限**:只能使用 API 金鑰或瀏覽器憑證
輪替檢查清單
每次輪替時執行:
| 步驟 | 指令 |
|------|------|
| 產生新金鑰 | `ssh-keygen -t ed25519 -C "rotated-$(date +%Y%m%d)"` |
| 驗證新金鑰可登入 | `ssh -i ~/.ssh/id_ed25519_new user@server "echo ok"` |
| 部署新公鑰 | `ssh-copy-id -i ~/.ssh/id_ed25519_new user@server` |
| 停用舊金鑰 | 從 authorized_keys 中移除舊公鑰 |
| 更新本地 config | 更新 .ssh/config 指向新金鑰 |
| 記錄輪替日誌 | 保存輪替日期和伺服器清單 |
常見陷阱
- **忘記停用舊金鑰**:輪替後舊金鑰仍可從舊裝置登入,必須明確移除
- **金鑰權限過寬**:私鑰權限需 600,否則 SSH 會拒絕使用
- **混合使用 RSA 和 Ed25519**:建議統一技術棧,避免相容性問題
- **ForwardAgent 濫用**:遠端伺服器可藉此存取其他主機,生產環境務必關閉
---
**摘要**:建立一套「產生→部署→驗證→輪替」的閉環流程,讓 SSH 安全不再是被動防禦,而是日常維運的主動標準。
⚙️ 安装与赋能
clawhub install skill-20260728-ssh-key-rotation安装后在你的 Agent 配置中启用此技能,重启 Agent 即可生效。