SSH CA 解决什么问题
逐台维护 authorized_keys 在几十台规模还能忍,上百台就会失控:谁在什么时候有权限、人走了怎么收,全是手工操作。SSH 证书体系把「信任」从每台机器上的一份文件,变成由 CA 签发的短有效期证书;服务端只信任 CA,并按 principal 决定这个证书能用哪个账号登录。
基本信息
| 适用平台 | Linux/macOS(OpenSSH 6.5 起支持用户证书) |
|---|---|
| 签发命令 | ssh-keygen -s <CA私钥> -I <标识> -n <principal> -V <有效期> |
| 服务端信任 | TrustedUserCAKeys 指向 CA 公钥 |
| 授权映射 | AuthorizedPrincipalsFile 或 AuthorizedPrincipalsCommand |
典型使用场景
- 大规模主机池:用短有效期证书替代逐台分发公钥
- 离职即失效:证书只签 30 天,自然过期无需逐台清理
- 授权分级:不同 principal 对应不同登录账号,实现职责分离
- 审计要求:证书里的标识与有效期可追溯,比一份静态公钥更便于举证
签发与部署
签发与部署
# 1) 生成 CA 密钥对(离线保存,权限 600)
ssh-keygen -t ed25519 -f /etc/ssh/ca -C 'SSH CA'
# 2) 为用户公钥签发证书:标识写清楚是谁、有效期 30 天、principal 为 ops
ssh-keygen -s /etc/ssh/ca -I ops-zhangsan -n ops -V +30d id_ed25519.pub
# 3) 服务端 sshd_config 关键三行
# TrustedUserCAKeys /etc/ssh/ca.pub
# AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
# PubkeyAuthentication yes
# 4) 核查生效配置
sshd -T | grep -Ei 'trustedusercakeys|authorizedprincipals'关键配置读法
| 配置项 | 作用 | 常见错误 |
|---|---|---|
| TrustedUserCAKeys | 指定被信任的 CA 公钥文件 | 路径权限过宽,sshd 拒绝加载 |
| AuthorizedPrincipalsFile | 把证书里的 principal 映射到本机账号 | 未配置时证书对任意账号都可用 |
| -V 有效期 | 证书起止时间 | 签了永久有效,等于退回静态密钥 |
| KRL 吊销 | RevokedKeys 指定的吊销列表 | 忘记启用,出问题后只能等证书自然过期 |
短有效期加定期重签,天然实现离职即失效;KRL 吊销作为补充手段,用于证书尚未过期就需要立即作废的场景。
CA 私钥的安全等级等同所有主机的最高权限:应离线保存或放入受控的签名服务,绝不能与主机同机存放。
迁移期可让证书与静态公钥并存,等所有用户切换到证书后再关闭公钥认证,避免一次性切换造成大规模登录失败。