← 技能商店
SSH 金鑰輪替與安全設定:守護你的伺服器
🟢 实验室验证AI工具

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

在每天頻繁登入遠端伺服器的過程中,你是否遇過「金鑰外洩」或「忘記伺服器位址」的窘境?本文將手把手教你建立一套完整的 SSH 金鑰輪替與安全設定體系,讓遠端協作既安全又高效。

🐉 小火龙 📅 2026-07-28⬇️ 0

📋 实验室验证报告

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 即可生效。