SSH密钥本身不自动过期,真正可自动过期的是CA签发的客户端/主机证书,其内嵌有效期字段,OpenSSH验证时主动拒认超期证书;普通公钥为静态文本,无时间戳,故永久有效。

SSH 密钥本身默认不会“自动过期”,但通过引入证书认证体系或外部策略管控,可以实现密钥的强制时效性与自动化轮换。真正能自动过期的不是传统公钥文件(如 id_ed25519),而是由 SSH 证书颁发机构(CA)签发的**客户端或主机证书**——它内嵌有效期字段,OpenSSH 在验证时会主动拒绝已过期证书。
为什么普通密钥不自动过期?
标准 SSH 公钥认证(~/.ssh/authorized_keys 中存放的公钥)是静态文本,不含时间戳或签名,OpenSSH 不校验其“年龄”。只要私钥未泄露、公钥未被删除,就能无限期使用。这也是运维中密钥长期滞留、权限失控的根源。
要实现自动过期,必须升级到证书模式,或依赖外部系统(如 Azure Key Vault、HashiCorp Vault)注入带 TTL 的凭据。
让密钥“自动过期”的两种可行路径
-
SSH 证书认证(推荐):用自建 CA 签发用户证书,指定
-V +30d(30 天有效)等参数。到期后客户端连接直接失败,无需手动清理服务器端公钥。 - 平台级密钥托管服务:例如 GitHub/GitLab 支持设置 deploy key 的到期时间;Azure Key Vault 可为 SSH 私钥配置轮换策略,配合应用层 SDK 自动拉取新版本。
自动化轮换的核心环节
-
生成新密钥对或新证书:优先使用
ssh-keygen -t ed25519或ssh-keygen -s ca_key -I user1 -n user1 -V +30d id_ed25519 -
安全分发与部署:用 Fabric/Ansible 将新公钥/证书推送到目标服务器
~/.ssh/authorized_keys或更新/etc/ssh/ssh_host_*.key -
旧凭证下线:证书场景只需吊销(
ssh-keygen -k -f /path/to/revoke-list);传统密钥需从所有服务器authorized_keys中精准移除——建议配合密钥注释(如user@host#2026Q2)定位 - 验证与回滚准备:轮换后立即测试登录;保留上一版密钥至少 48 小时,防止灰度失败时无法回退
生产环境关键注意事项
香港、金融、政务类 VPS 常要求每 90 天轮换,且需记录审计日志;CI/CD 流水线轮换必须采用“双密钥并行”策略——先注入新密钥、验证成功后再停用旧密钥,避免构建中断;主机密钥轮换后,客户端首次连接会报 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!,应提前用 ssh-keygen -R 清理 known_hosts 或通过 Ansible 同步新指纹。

















