核心是统一离线生成SSH CA密钥对,所有集群信任同一CA公钥;分别签发用途分离的用户证书(含-n用户名)和主机证书(加-h标志、-n指定主机名);服务端启用TrustedUserCAKeys与HostCertificate,客户端禁用TOFU、严格验证主机证书。

用 SSH 证书颁发机构(CA)实现跨集群信任链管理,核心是让多个集群共用同一套签名权威,而非在每台机器上手动追加公钥或维护分散的 known_hosts。它不依赖“多域名证书”的概念,而是通过用户证书与主机证书双轨验证,构建可审计、可撤销、自动生效的信任闭环。
统一 CA 密钥对:信任的根必须离线生成且严格分发
所有集群节点(无论属于 dev、prod 还是 staging)都必须信任同一个 CA 公钥。这个公钥是整个信任链的起点:
- 在可信离线环境执行:
ssh-keygen -t ed25519 -f ssh_ca -C "ca@company",生成ssh_ca(私钥)和ssh_ca.pub(公钥) - 私钥绝不上传、不共享、不备份到在线系统;建议用密码加密(
-N "passphrase") - 公钥
ssh_ca.pub是唯一需分发的文件,权限设为644,属主为root,所在目录(如/etc/ssh/)不可被组或其他用户写入 - 各集群的 SSH 服务端配置中,均指向该公钥路径:
TrustedUserCAKeys /etc/ssh/ca_users.pub
分别签发用户证书与主机证书:用途不可混用
OpenSSH 要求用户证书和主机证书使用不同标识与参数,否则服务端拒绝验证:
- 用户证书用于登录身份认证,必须含
-n(指定允许登录的用户名)和-I(唯一标识,如dev-ops@cluster-a):ssh-keygen -s ssh_ca -I "alice@prod" -n "alice" -V +26w id_alice.pub - 主机证书用于服务端身份证明,必须加
-h标志,并用-n指定主机名列表(支持通配符或逗号分隔):ssh-keygen -s ssh_ca -I "web-cluster-b" -h -n "web1.b.example.com,web2.b.example.com,*.b.internal" -V +52w ssh_host_ed25519_key.pub - 签发后,主机证书(
*-cert.pub)与原主机私钥一起部署,服务端配置中启用:HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
客户端与服务端协同验证:缺一不可
只签发证书不够,OpenSSH 必须明确知道该信谁、验什么。配置需两端对齐:
- 服务端(
/etc/ssh/sshd_config):
启用用户证书验证:TrustedUserCAKeys /etc/ssh/ca_users.pub
启用主机证书验证:HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
禁用弱认证方式:PasswordAuthentication no、PubkeyAuthentication yes - 客户端(
~/.ssh/config):
对目标集群域名启用严格主机验证:Host *.b.example.com<br> StrictHostKeyChecking yes<br> VerifyHostKeyDNS no<br> UserKnownHostsFile /dev/null
这样连接时将完全依赖证书链(CA 公钥 → 主机证书 → 主机私钥),跳过 TOFU 模式
跨集群生命周期与安全增强
信任链要长期可靠,需配套策略支撑:
- 证书有效期宜设为短期(如用户证书 4–26 周,主机证书 6–52 周),避免长期失效风险;时间偏差超 5 分钟即拒签,务必同步各集群 NTP
- 吊销机制:通过
RevokedKeys /etc/ssh/revoked_keys配置吊销列表,配合定期更新脚本或自动化平台推送 - 权限最小化:用户证书可加
-O source-address="10.10.0.0/16"或-O force-command="/usr/bin/backup-only",限制使用场景 - 审计追踪:所有
-I标识应带环境+角色前缀(如dba-prod、ci-runner-staging),便于日志归因

















