實驗室已驗證

SSH 金鑰輪替與安全設定:守護你的伺服器

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 公鑰)

何時不應使用此方法?

  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 安全不再是被動防禦,而是日常維運的主動標準。

怎麼用

先在隔離環境中按記錄步驟重現,再決定是否採用這項技能。

實測效果

實驗室只記錄可重現結果,不把未經驗證的說法寫成結論。

踩坑

套用前核對權限、輸入、回復步驟和證據是否完整。

適用場景

適合環境條件與本報告證據範圍一致的任務。

不適用場景

缺少必要證據、隔離條件或回復控制時不要使用。