定期清理SSH临时授权凭证需实现自动化闭环管理,核心是精准识别三类凭证、基于有效期与使用状态双重判断、通过扫描-预检-执行三阶段流程落地,并配套审计、双人复核及72小时回滚机制。

定期清理过期且未使用的SSH临时授权凭证,核心是把“凭证生命周期管理”从人工操作转为平台自动闭环。关键不在于删得快,而在于删得准、可追溯、不误伤。
明确凭证类型与存储位置
临时SSH授权凭证通常有三类,清理前必须先识别清楚:
-
用户级临时密钥对:存放在
~/.ssh/下的id_ed25519_temp或带时间戳命名的私钥文件 -
证书签名文件(SSH Cert):以
.pub-cert结尾,由 CA 签发,有效期写在证书内(非文件名) -
堡垒机/跳板机发放的一次性令牌或会话密钥:常存于
/var/run/ssh-tokens/或数据库中,需对接其API清理
基于时间与状态双重判断清理条件
仅靠文件创建时间(ctime)或修改时间(mtime)不可靠——临时密钥可能生成后从未使用。应结合:
-
证书有效期解析:用
ssh-keygen -L -f cert.pub提取 Valid: from … to …,自动比对当前时间 -
最后登录时间(auth.log 或 auditd 日志):检查该密钥对应公钥在
~/.ssh/authorized_keys中的行号,反查日志中最近一次成功认证时间 -
是否被标记为“已撤销”:如配置了
RevokedKeys /etc/ssh/revoked_keys,需同步校验该列表
在自动化平台中落地执行策略
以主流平台(Ansible Tower / Jenkins / 自研运维中台)为例,推荐采用“扫描+预检+执行”三阶段流程:
-
扫描任务(每日凌晨执行):运行脚本遍历所有目标主机的
/home/*/.ssh/authorized_keys和证书目录,提取密钥指纹、签发者、有效期、绑定用户名,写入中央数据库 - 预检看板(人工确认入口):平台前端展示即将被清理的凭证清单,含“最后使用时间”“所属项目”“申请人”字段;支持勾选排除、添加保留理由
-
自动执行(按计划触发):对通过预检的条目,调用 Ansible playbook 执行:
- 删除
authorized_keys中对应行(用sed -i '/FINGERPRINT/d'安全移除) - 归档私钥与证书到加密备份区(路径含日期+主机名,保留30天)
- 向申请人企业微信/邮件发送清理通知,附恢复申请链接
- 删除
配套审计与防误删机制
清理不是终点,而是安全闭环的一环:
- 每次清理动作写入独立审计日志,包含操作人(平台账号)、主机IP、密钥指纹、清理原因代码(如
EXPIRED_CERT、INACTIVE_90D) - 对 root 或 admin 用户的密钥,强制启用“双人复核”开关:需两名具有权限的运维在平台内分别点击确认才生效
- 保留“回滚窗口”:自动清理后72小时内,可通过平台一键还原被删的
authorized_keys行(从归档备份中提取)

















