ssh证书认证核心是建立可信任、可控制、可自动失效的身份体系,通过专用ca签发短期用户/主机证书,统一管理千台服务器信任关系,替代密钥分发与轮换。

用SSH证书颁发机构(CA)实现大规模服务器集群的免密安全认证,核心不是“复制密钥”,而是建立一套可信任、可控制、可自动失效的身份体系。它把成百上千台服务器的信任关系收束到一个中心CA上,用户和主机身份都由CA签发短期证书来证明,彻底摆脱逐台维护authorized_keys或分发私钥的麻烦。
一、先建一个安全可信的CA根节点
选一台物理隔离、不对外开放SSH服务的加固服务器作为CA。它只干一件事:签发和吊销证书。
- 生成强密码保护的CA密钥对:
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ca_key -C "ca@prod",私钥必须离线备份,权限设为600 - 提取CA公钥:
ssh-keygen -L -f /etc/ssh/ca_key.pub,把输出中ssh-rsa AAAA...开头的整行内容保存为/etc/ssh/ca_key.pub - 将该公钥部署到所有目标服务器的
/etc/ssh/ca_key.pub,并在/etc/ssh/sshd_config中添加:TrustedUserCAKeys /etc/ssh/ca_key.pubHostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub(启用主机证书时) - 执行
sshd -t校验配置,再systemctl restart sshd
二、分别签发用户证书和主机证书
SSH证书分两类,缺一不可:用户证书用于“你是谁”,主机证书用于“你连的是不是真机器”。两者配合才能防中间人、防冒用。
-
用户证书:员工用自己的私钥生成公钥(如
id_ed25519.pub),提交给CA;CA运行:ssh-keygen -s /etc/ssh/ca_key -I user-alice -n alice -V +4w id_ed25519.pub
其中-n alice指定登录用户名,-V +4w设4周有效期,生成id_ed25519-cert.pub -
主机证书:在每台目标服务器上运行:
ssh-keygen -s /path/to/ca_key -I web01 -h -V +52w /etc/ssh/ssh_host_rsa_key.pub
生成ssh_host_rsa_key-cert.pub,更新sshd_config中HostCertificate指向它,并重启sshd
三、客户端零配置自动生效
用户只需持有自己的私钥+对应证书文件,OpenSSH 7.2+会自动识别并使用,无需改命令、装插件。
- 把
id_ed25519和id_ed25519-cert.pub放在~/.ssh/下,文件名匹配(如私钥叫id_ed25519,证书就得叫id_ed25519-cert.pub) - 连接时直接
ssh alice@web01,OpenSSH自动携带证书;也可用ssh -o CertificateFile=~/.ssh/id_ed25519-cert.pub alice@web01显式指定 - 批量管理推荐用Ansible:通过
copy模块分发证书,配合file模块确保.ssh目录权限为700、证书文件为600
四、靠有效期和吊销机制实现真正可控
证书的价值不在“免密”,而在“可管”。一张证书过期即失效,一次吊销全网同步,不用登服务器删文件。
- 所有证书必须设
ValidBefore,例如-V +2w签两周,避免长期有效带来的风险累积 - 需紧急停用某人时,往CA服务器的
/etc/ssh/revoked_keys里追加其公钥(一行一个),并在sshd_config中启用:RevokedKeys /etc/ssh/revoked_keys - CA密钥建议每年轮换一次;旧CA签发的证书会自然过期,无需手动清理,新CA可并行运行过渡










