如何设置服务器 SSH 密钥轮换机制教程

作者:袖梨 2026-07-14
企业级SSH密钥轮换核心是90天有效期+提前7天提醒+30天旧密钥保留的过渡机制,需新密钥验证登录、自动化任务切换、服务端加固及权限检查后,再清理旧密钥。

配置服务器 SSH 密钥轮换机制,核心是建立可重复、可验证、低风险的更新流程,而不是简单替换密钥。重点在于新旧密钥并存过渡、权限控制严格、验证闭环完整。

明确轮换节奏与策略

不建议“一刀切”立即删除旧密钥。企业级实践普遍采用 90 天有效期 + 提前 7 天提醒 + 30 天保留期的组合策略:

  • 新密钥生成后,先添加进 ~/.ssh/authorized_keys,不移除旧条目
  • 必须用新密钥成功登录至少 2 次(含非交互式连接,如 Fabric 或 rsync)
  • 确认所有自动化任务(备份脚本、CI/CD 部署、监控探针)已切换使用新私钥
  • 旧密钥保留在 authorized_keys 中 30 天,作为回滚通道;超期后手动或脚本清理

生成与分发新密钥对

优先选用 Ed25519 算法(安全性高、性能好),避免弱参数:

  • 在可信客户端生成: ssh-keygen -t ed25519 -C "rot-202606-prod" -f ~/.ssh/id_ed25519_202606
  • 为私钥设置强 passphrase(至少 12 位,含大小写字母+数字+符号),防止本地泄露即失守
  • ssh-copy-id -i ~/.ssh/id_ed25519_202606.pub user@server 安全追加公钥;若不可用,改用管道方式确保权限正确:
    cat ~/.ssh/id_ed25519_202606.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

服务端加固与权限检查

密钥有效 ≠ 登录安全。必须同步收紧服务端配置:

  • 确认 /etc/ssh/sshd_config 中禁用密码登录:PasswordAuthentication no,且 PubkeyAuthentication yes
  • 检查用户家目录及 SSH 目录权限:~ 应为 755,~/.ssh 必须是 700,~/.ssh/authorized_keys 必须是 600
  • 运行 sshd -t 验证配置语法,再 systemctl reload sshd(非 restart,避免断连)
  • 可选增强:在 authorized_keys 中为每行公钥添加限制项,例如:
    command="/usr/bin/uptime",no-port-forwarding,no-X11-forwarding,from="192.168.10.0/24" ssh-ed25519 AAAA...

验证与自动化衔接

轮换不是终点,而是持续验证的起点:

  • 用新密钥执行最小化命令验证:ssh -i ~/.ssh/id_ed25519_202606 user@server 'hostname; id'
  • 检查 SSH 日志确认认证方式:journalctl -u sshd --since "5 minutes ago" | grep "Accepted publickey"
  • 若使用 Fabric、Ansible 等工具,需同步更新其连接配置中 key_filename 路径,并测试任务是否仍能执行
  • 将轮换步骤封装为带 dry-run 模式的 Bash 或 Python 脚本,加入定时任务前先人工执行一次全流程

相关文章

精彩推荐