OpenSSH通过CA机制实现多主机统一信任,替代传统多域名证书:用ssh-keygen生成CA密钥,签发用户/主机证书,服务器配置TrustedUserCAKeys或HostCertificate,客户端自动验证证书链。
OpenSSH 不支持传统意义上的“多域名证书”或 X.509 证书链式身份验证(那是 TLS/SSL 的机制),它使用的是基于公钥的认证体系,核心是
生成的密钥对和
文件。所谓“多域名”或“身份验证链”,实际是指:如何让一个 SSH 密钥对安全、灵活地用于多个主机(不同域名/IP)、多个用户身份,并支持可信委托(如 CA 签发的用户/主机密钥)。下面从实用角度讲清关键配置与管理逻辑。
用 SSH CA 实现多主机统一信任(替代“多域名证书”)
OpenSSH 自 6.8 起支持证书颁发机构(CA)模式,这是最接近“证书链”的方案——你无需在每台服务器上手动追加公钥,而是由一台可信 CA 签发用户/主机证书,服务器只需信任该 CA 公钥即可验证所有签名证书。
生成 CA 密钥:
(私钥保密,公钥
分发给所有服务器)
为用户签发证书:
(
指定允许登录的用户名,
设有效期)
服务器端配置:
中添加
,然后重启 sshd
客户端使用时,直接用签发后的私钥连接,服务端自动校验证书链(CA 公钥 → 用户证书 → 用户私钥)
一个密钥对安全复用多个域名/主机的方法
不依赖 CA 时,“多域名”本质是让同一组密钥在不同主机上生效。关键是控制密钥分发范围与权限粒度:
把公钥(
)内容追加到各目标主机的
,支持多行、多主机
用
、
、
等选项限制单个公钥的行为(例如:某公钥仅允许从特定 IP 连接,或只执行备份命令)
避免使用空密码私钥;推荐配合
或
管理解密口令,提升多环境使用体验
可为不同用途生成独立密钥对(如
、
),再通过
绑定域名与密钥:
主机密钥信任链:如何安全验证目标服务器身份
客户端首次连接时保存的
就是你的“主机身份信任链”。要实现跨域名的可信验证(比如
和
都由同一 CA 签发主机证书):
用 CA 签发主机证书:
服务器配置中启用:
客户端设置
:
,并把 CA 公钥放入
(以
开头)
这样,只要主机证书由该 CA 签发且域名匹配,客户端就自动信任,无需手动确认指纹
清理与轮换:避免身份链失效或泄露
长期运行中,密钥过期、人员变动、服务器迁移都会导致信任链断裂。必须建立运维闭环:
用户证书过期后,服务端会拒绝登录,需重新签发;建议用短有效期(如 90 天)+ 自动化脚本续期
撤销已泄露或离职用户的访问权:修改 CA 的
文件(需 OpenSSH ≥ 7.5),并在
中配置
主机密钥轮换时,先部署新密钥+证书,再更新客户端的全局 known_hosts,最后停用旧密钥,避免中断
定期审计
内容、CA 签发记录和证书有效期(可用
查看证书详情)
ssh-keygenauthorized_keysssh-keygen -t rsa -b 4096 -f ca_keyca_key.pubssh-keygen -s ca_key -I user@example.com -n user1 -V +52w id_rsa.pub-n-V/etc/ssh/sshd_configTrustedUserCAKeys /etc/ssh/ca_key.pubid_rsa.pub~/.ssh/authorized_keyscommand=from=no-port-forwardingssh-agentgpg-agentid_rsa_workid_rsa_personal~/.ssh/configHost work.example.com
IdentityFile ~/.ssh/id_rsa_work~/.ssh/known_hostsweb1.example.comweb2.example.comssh-keygen -s ca_key -I host/web1.example.com -h -n web1.example.com -V +52w /etc/ssh/ssh_host_rsa_key.pubHostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub~/.ssh/configHost *.example.com
StrictHostKeyChecking yes
UserKnownHostsFile /dev/null
GlobalKnownHostsFile /etc/ssh/ssh_known_hosts/etc/ssh/ssh_known_hosts@cert-authorityrevoked_keyssshd_configRevokedKeys /etc/ssh/revoked_keysauthorized_keysssh-keygen -L -f cert.pub