SSH证书认证是基于PKI的规模化权限管理方案,通过CA签发带身份、时效、权限的证书,解决传统密钥难以批量吊销、审计粒度粗、用途混淆等问题。

Linux SSH 证书认证不是简单地把密钥换成证书,而是用一套可签发、可吊销、带有效期和身份属性的公钥基础设施(PKI)来统一管理成百上千台服务器的访问权限。它解决了密钥对管理混乱、无法批量失效、缺乏审计粒度等痛点,是企业级运维和云环境规模化安全管控的核心方案。
为什么普通密钥不够用?
当服务器数量超过几十台,运维人员超过十人时,传统密钥管理就会暴露明显短板:
- 每台服务器都要手动追加多个
authorized_keys文件,易遗漏或出错 - 员工离职后,需逐台登录删除其公钥,响应慢且不可靠
- 无法区分“开发机访问”和“CI/CD自动部署”这类不同用途的登录行为
- 密钥本身无有效期,长期使用增加泄露风险
- 审计日志只能看到“某公钥登录”,无法关联到具体部门、角色或项目
SSH 证书认证的核心机制
它复用 OpenSSH 内置的证书支持(自 OpenSSH 5.4 起可用),不依赖外部 CA,但需自建签名中心(通常是一台受控的 CA 主机):
-
用户证书:由 CA 签发,绑定用户公钥 + 元数据(如
principals="devops,ci"、valid_after/valid_before、extensions="permit-pty,permit-port-forwarding") -
主机证书:用于验证服务器身份,防止中间人攻击;客户端配置
HostKeyAlgorithms +ssh-ed25519-cert-v01@openssh.com并信任 CA 公钥 -
CA 公钥:部署在所有目标服务器的
/etc/ssh/trusted_user_ca_keys,sshd 用它验证用户证书签名
快速落地三步走
无需改造现有架构,只需新增轻量组件:
-
第1步:生成 CA 密钥对
在可信主机运行:ssh-keygen -t ed25519 -f ca_key -C "ssh-ca@company",保护好ca_key私钥(建议加密存储或离线保管) -
第2步:配置服务器信任 CA
将ca_key.pub放入每台服务器的/etc/ssh/trusted_user_ca_keys,并在/etc/ssh/sshd_config中添加:TrustedUserCAKeys /etc/ssh/trusted_user_ca_keysRevocationFile /etc/ssh/revoked_keys(用于吊销) -
第3步:签发并分发用户证书
例如为开发人员生成带角色和有效期的证书:ssh-keygen -s ca_key -I "alice@dev" -n "alice,dev" -V +30d ~/.ssh/id_ed25519.pub
生成的id_ed25519-cert.pub替换原公钥即可使用
配合自动化更高效
证书天然适配脚本化流程:
- CI/CD 流水线可动态申请短期证书(如仅限本次构建生效),用完即废
- 入职/离职流程触发证书签发或吊销,同步更新
revoked_keys文件并重载 sshd - Ansible 或 SaltStack 可批量推送 CA 公钥、配置文件和吊销列表
- 结合 PAM 或 LDAP,实现证书身份与组织架构自动映射


















