导读:本期聚焦于风铃创作的《如何用SSH CA证书认证体系管理大规模服务器访问?》,敬请观看详情。SSH证书认证体系把传统公钥信任模型升级为中心化证书签发机制。用户登录时不再依赖每台服务器上手工放置的公钥,而是由CA签发的短期证书完成身份证明。服务器信任CA后,凡是CA签发的证书都能自动通过校验,证书中还可以嵌入用户名、有效期、权限扩展等信息。本文从OpenSSH的证书格式入手,说明用户证书与主机证书的区别,演示如何使用ssh-keygen生成CA密钥并对用户公钥签发证书,再结合sshd_config配置TrustedUserCAKeys完成服务器端信任。同时介绍证书吊销、有效期控制、基于principal限制登录用户等生产级实践。读完可以理解如何用CA方式简化百台甚至千台服务器的SSH访问管理,避免密钥散落、离职员工密钥漏删等安全风险。

SSH CA证书认证体系为批量管理服务器提供了一种中心化信任机制。管理员先创建一对CA密钥,然后使用CA私钥对用户公钥进行签名,生成带有有效期和用户名限制的SSH证书。服务器配置TrustedUserCAKeys后,任何持有该CA签发证书的用户都能登录,不再需要在每台主机上维护authorized_keys文件。

如何用SSH CA证书认证体系管理大规模服务器访问?

一、SSH传统认证的痛点与CA认证思路

在传统SSH公钥认证中,每个用户需要把个人公钥写入目标服务器的authorized_keys文件。服务器数量较少时这种方式还能接受,但当服务器达到几十台甚至上百台后,公钥分发、撤销、审计就成了非常繁琐的工作。新员工入职需要在所有相关机器上追加公钥,离职员工则需要逐台清理,一旦遗漏就可能留下长期有效的访问通道。

SSH CA认证借鉴了PKI数字证书的思路。管理员生成一对CA密钥,使用CA私钥对用户公钥签名,生成一份带有时间戳、身份标识、权限限制的证书文件。服务器配置为信任该CA的公钥,用户登录时提交证书而不是原始公钥。服务器用CA公钥校验证书签名,再检查证书中的principal是否匹配登录用户名、证书是否在有效期内。证书过期后自动失效,即使没有及时删除公钥也能阻断旧凭证的使用。

这种方式把信任锚点从每台服务器分散维护的authorized_keys统一到了CA公钥上。管理员只需要保护CA私钥,签发短期证书即可控制访问。对于拥有大量服务器和频繁人员变动的团队,SSH CA可以显著降低运维成本,同时提升安全性。

二、SSH CA证书类型与证书字段解析

OpenSSH的证书体系支持两种证书:用户证书和主机证书。用户证书用于证明某个用户公钥的身份,主机证书则用于证明服务器身份。本文重点介绍用户证书,但主机证书的原理相同,可以用于防止主机密钥首次连接时的指纹确认问题。

SSH证书本质上是在原始公钥前面附加了一段由CA签名的元数据。使用ssh-keygen签发证书后,会生成一个以-cert.pub结尾的证书文件。证书中最重要的字段包括:

  • 类型:区分用户证书和主机证书。
  • 公钥:被CA签名的原始用户公钥。
  • 序列号:用于吊销列表匹配的唯一编号。
  • 有效期:从颁发时间到过期时间的时间窗口。
  • principal:允许登录的用户名列表,可以是单个用户名或多个逗号分隔的用户名。
  • 扩展选项:可以限制证书只能用于特定功能,例如禁止端口转发、禁止pty分配等。

下面通过命令查看一张已经签发的用户证书内容,能够直观看到这些字段。

ssh-keygen -L -f ~/.ssh/id_ed25519-cert.pub

管理员可以为同一个用户公钥签发出不同principal的证书。例如一个开发人员可能被允许以deploy用户身份登录生产服务器,但只能以普通用户身份登录测试环境。这种细粒度的身份映射比传统authorized_keys灵活很多。

三、搭建SSH CA认证环境

搭建SSH CA认证环境主要分为创建CA密钥、签发用户证书、配置服务器信任三步。第一步需要在一个安全的离线环境或受保护的管理主机上生成CA密钥。CA私钥是信任链的根,必须妥善保管,建议使用硬件安全模块或加密文件存储。

使用ssh-keygen生成CA密钥的命令如下。这里使用ed25519算法,密钥文件和公钥文件分别保存。

ssh-keygen -t ed25519 -f /etc/ssh/ca_user -C "User CA"

生成后会在指定路径得到ca_user私钥和ca_user.pub公钥。接下来对目标用户的公钥签发证书。例如用户张san已经生成了自己的id_ed25519.pub公钥,管理员拿到该公钥后执行以下命令签发8小时有效的证书,允许以zhangsan和root两个用户名登录。

ssh-keygen -s /etc/ssh/ca_user -I user-zhangsan -n zhangsan,root -V +8h /home/zhangsan/.ssh/id_ed25519.pub

命令中的-s指定CA私钥,-I指定证书序列号标识,-n指定principal列表,-V指定有效期。签发完成后,会在原公钥目录下生成id_ed25519-cert.pub证书文件。用户登录时OpenSSH客户端会自动识别同目录下的证书文件并提交给服务器。

服务器端需要在sshd_config中配置TrustedUserCAKeys,指向CA公钥路径。修改配置后重启sshd服务使配置生效。

echo 'TrustedUserCAKeys /etc/ssh/ca_user.pub' | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart sshd

完成以上配置后,用户即可通过ssh命令正常登录。服务器会验证证书签名、有效期和principal,全部通过后接受登录。传统authorized_keys文件中不需要再包含该用户的公钥,维护工作大幅简化。

四、证书吊销与生命周期管理

短期证书是SSH CA认证体系的重要优势,但生产环境中仍可能需要在证书到期前主动吊销,例如员工离职或证书私钥泄露。OpenSSH提供了密钥吊销列表机制,可以记录需要撤销的证书序列号,服务器在认证时发现证书命中KRL就直接拒绝登录。

先生成一个吊销列表文件,然后用以下命令把证书序列号加入吊销列表。

ssh-keygen -k -f /etc/ssh/krl -s /etc/ssh/ca_user < revoked-cert-list.txt

注意上面代码中的输入重定向符号<需要在实际命令中保留。revoked-cert-list.txt文件中包含要吊销的证书序列号或证书文件内容。服务器需要额外配置RevokedKeys字段指向KRL文件。

echo 'RevokedKeys /etc/ssh/krl' | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart sshd

证书过期时间不宜设置过长。对于需要长期运行的自动化任务,可以采用更细粒度的续期机制,例如由配置管理系统定时签发新证书。管理员还应当定期审计CA私钥的使用记录,确保证书签发动作可追溯。

五、安全加固与实际生产建议

SSH CA认证体系虽然简洁,但安全性高度依赖CA私钥的保管。一旦CA私钥泄露,攻击者可以为自己签发任意principal和有效期的证书,等同于拥有所有服务器的入口。因此CA私钥应当与日常业务主机隔离,推荐放在离线签名机或专用密码管理系统中。

证书的扩展选项也能进一步提高安全性。签发证书时可以使用-O参数关闭端口转发、pty分配或强制指定源地址。例如以下命令签发一张禁止端口转发和禁止pty的证书。

ssh-keygen -s /etc/ssh/ca_user -I user-ops -n ops -V +4h -O no-port-forwarding -O no-pty /home/ops/.ssh/id_ed25519.pub

另外,建议在服务器上同时开启日志记录,将证书序列号、登录时间、来源IP等信息写入系统日志,配合集中日志平台进行访问审计。对于已经兼容的主机环境,还可以引入多级CA结构,将不同业务线、不同环境的信任范围隔离,避免单张CA证书影响面过大。

SSH CA证书认证体系非常适合服务器数量多、团队人员流动频繁的场景。它把分散的公钥管理集中到CA上,通过短期证书、principal限制和吊销列表实现精细的访问控制。虽然需要额外维护一台CA签名机,但相比传统authorized_keys方式带来的安全隐患和运维成本,整体收益非常明显。

SSH CA证书认证服务器访问修改时间:2026-08-24 20:57:50

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。