SSH CA实现跨集群信任链的核心是通过分层CA体系(统一或交叉信任域)建立可验证、可隔离、可收敛的信任关系,关键在于信任的分层传递而非证书数量;需严格分离主机CA与用户CA、强制有效期、绑定源IP与角色,并确保时间同步与权限管控。

用 SSH CA 实现跨集群身份信任链,核心是让不同集群之间通过共享或交叉导入的 CA 公钥,建立可验证、可隔离、可收敛的信任关系,而不是靠手动同步 known_hosts 或复制 authorized_keys。关键不在“证书多”,而在“信任怎么分层传递”。
统一信任域:单根 CA 覆盖全部集群
适用于同一组织下多个集群(如 prod / staging / dr),由一个中心化 CA 签发所有用户与主机证书。
- 离线生成一对主 CA 密钥(如 root-ca),私钥严格保管,公钥 root-ca.pub 分发至所有集群的
/etc/ssh/目录 - 为每个集群的主机批量签发主机证书,支持通配符或多域名:
ssh-keygen -s root-ca -I cluster-prod -h -n "web*.prod.example.com,db*.prod.example.com" -V +26w ssh_host_ed25519_key.pub - 为运维人员统一签发用户证书,绑定角色与权限:
ssh-keygen -s root-ca -I ops@prod -n "deployer" -V +4h -O source-address="10.10.0.0/16" id_rsa.pub - 所有集群的
sshd_config均配置:TrustedUserCAKeys /etc/ssh/root-ca.pubHostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
交叉信任域:双向 CA 公钥互信
适用于子公司、合作方或隔离业务线的集群,彼此拥有独立 CA,但需建立有限互通能力。
- 集群 A 使用 ca-a 签发自身主机证书;集群 B 使用 ca-b 签发自身主机证书
- 在集群 A 的
sshd_config中添加两行:TrustedUserCAKeys /etc/ssh/ca-a.pub /etc/ssh/ca-b.pub
(OpenSSH 8.6+ 支持多路径空格分隔) - 同样,集群 B 配置中也引入
ca-a.pub,实现双向用户登录许可 - 主机证书仍各自验证——即集群 A 的服务器只信任自己 CA 签发的主机证书,但允许集群 B 的用户用 ca-b 签发的用户证书登录
- 建议限制交叉信任范围:仅对特定用户名(
-n "ext-deploy")和源 IP 段(-O source-address="172.20.0.0/16")开放
主机与用户 CA 物理分离,控制爆炸半径
即使在同一信任域内,也应拆分为两个独立 CA:一个专管主机身份,一个专管用户身份。这是 SSH 证书机制最被低估的安全设计。
- 主机 CA(host-ca)只用于签发
-h主机证书,其公钥部署在sshd_config的TrustedUserCAKeys和HostCertificate配合使用 - 用户 CA(user-ca)只用于签发
-n用户证书,其公钥仅放入TrustedUserCAKeys,不参与主机验证 - 若用户 CA 私钥泄露,攻击者只能伪造用户登录权限,无法冒充任意服务器实施中间人攻击
- 若主机 CA 私钥泄露,攻击者可伪造服务器身份,但无法获得任意用户登录凭证——因为用户证书仍需 user-ca 签名才被接受
自动化与安全边界保障
跨集群场景下,人工操作极易出错,必须靠流程固化关键约束。
- 所有证书强制设置有效期(
-V +7d或+4h),避免长期有效密钥成为持久后门 - 证书签发必须带唯一标识(
-I)和用途限定(-n),服务端日志可通过ssh -v或journalctl -u sshd追踪具体证书匹配逻辑 - 集群间时间必须同步(NTP),时钟偏差超过 5 分钟会导致证书拒绝——这是 OpenSSH 内置硬性校验
- CA 公钥文件权限必须为
644,所在目录不可被组/其他用户写入;证书文件(如*-cert.pub)权限建议设为600

















