實驗室已驗證
SSH 金鑰輪替與安全設定:守護你的伺服器
SSH 金鑰輪替與安全設定:守護你的伺服器 在每天頻繁登入遠端伺服器的過程中,你是否遇過「金鑰外洩」或「忘記伺服器位址」的窘境?本文將手把手教你建立一套完整的 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 公鑰)
何時不應使用此方法?
- 臨時測試環境:使用臨時金鑰,無需持久化設定
- 公共伺服器:如 GitHub、雲端廠商控制台,使用 OAuth/雲端金鑰而非 SSH
- 無伺服器權限:只能使用 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 安全不再是被動防禦,而是日常維運的主動標準。
怎麼用
先在隔離環境中按記錄步驟重現,再決定是否採用這項技能。
實測效果
實驗室只記錄可重現結果,不把未經驗證的說法寫成結論。
踩坑
套用前核對權限、輸入、回復步驟和證據是否完整。
適用場景
適合環境條件與本報告證據範圍一致的任務。
不適用場景
缺少必要證據、隔離條件或回復控制時不要使用。