跳到主内容

OpenSSH 用户证书教程:CA 签发、有效期与撤销

用 OpenSSH 原生 CA 为 VPS 管理员签发短期用户证书,配置 TrustedUserCAKeys、principal、序列号和 KRL,并通过双会话验证与安全回滚上线。

GSProber · 主机测评编辑0 阅读
用 OpenSSH 原生 CA 为 VPS 管理员签发短期用户证书,配置 TrustedUserCAKeys、prin…

OpenSSH 用户证书教程:CA 签发、有效期与撤销

当 VPS 数量增加时,逐台维护 authorized_keys 很容易留下离职账号、过期设备和无法解释的公钥。OpenSSH 用户证书让服务器只信任一个或少量 CA 公钥,管理员的普通 SSH 公钥经过 CA 签名后,携带身份、principal、有效期与限制选项。它不是 HTTPS 使用的 X.509 证书,也不需要浏览器或公网证书机构。

本文采用离线 CA、短期用户证书和逐台灰度配置。开始前先保留现有密钥入口,并按nftables 防火墙教程确认管理端口;sshd 的进程管理与日志排查可以结合systemd 服务教程执行。

建立离线 CA 与信任文件

在不直接暴露于公网的管理环境生成专用 CA:ssh-keygen -t ed25519 -f user_ca -C user-ca。CA 私钥应加密保存,并限制访问;服务器只需要 user_ca.pub。不要把 CA 私钥复制到每台 VPS,也不要用同一把 CA 同时承担用户证书和主机证书用途。

把公钥放到服务器受 root 管理的位置,例如 /etc/ssh/user_ca.pub,权限保持只读。在 sshd_config 中设置 TrustedUserCAKeys /etc/ssh/user_ca.pub。该指令告诉 sshd 信任哪些 CA 来验证用户证书,但证书中的 principal 仍需与登录账户或显式授权规则匹配。

修改配置前运行 sshd -t 做语法检查,保持当前 SSH 会话不退出,再平滑重载服务。不要立刻删除原有 authorized_keys;先用第二个终端完成证书登录、失败路径和回滚验证。

签发带身份与有效期的用户证书

管理员在自己的设备生成普通密钥,把公钥提交给签发流程。CA 端可执行 ssh-keygen -s user_ca -I ticket-1234 -n deploy -V -5m:+8h -z 1001 admin.pub。其中 -I 是会写入日志的 key ID,适合关联工单或人员;-n 指定 principal;-V 设置有效期;-z 写入可跟踪的序列号。

起始时间略微提前可以容忍小幅时钟偏差,但不能替代 NTP。有效期应与任务持续时间匹配,避免使用永久证书。签发后会产生 admin-cert.pub,客户端在私钥旁保留该证书,或者通过 SSH 配置明确指定 CertificateFile。用 ssh-keygen -L -f admin-cert.pub 检查证书类型、CA 指纹、key ID、principal、有效期和扩展项。

principal 不应随意写成所有服务器的 root。可以按角色设计 deployops-readonly 等名称,并在服务器端通过 AuthorizedPrincipalsFile 为本地账户列出允许的 principal。这样,同一证书只有在目标账户明确接受其角色时才生效。

限制能力并验证登录

签发证书时可以用 -O 控制 agent forwarding、端口转发、PTY 等扩展或限制。默认行为应先在官方手册中核对,再按实际任务最小化能力。自动化发布账号通常不需要交互式 shell;运维人员也未必需要远程转发。限制必须在测试环境验证,避免脚本依赖被意外切断。

客户端使用 ssh -vv 可查看是否提交了证书,服务器用认证日志核对 key ID 与 principal。应至少测试正确账户成功、错误 principal 失败、过期证书失败、未受信 CA 失败,以及原有应急入口仍可用。只有新路径稳定后,才逐步清理分散的长期公钥。

撤销、轮换与审计

短有效期降低长期泄露风险,但紧急事件仍需撤销。ssh-keygen -k 可以创建 Key Revocation List,按证书、公钥、序列号或 key ID 管理撤销项;服务器通过 RevokedKeys 指向 KRL 文件。更新 KRL 后先验证文件可读和配置语法,再重载 sshd,并测试目标证书被拒绝。

CA 轮换时,可在 TrustedUserCAKeys 文件中暂时并列旧、新 CA 公钥,先让签发系统切换,再等待旧证书自然过期,最后移除旧 CA。若 CA 私钥疑似泄露,应立即停止签发、部署撤销策略并更换信任根,而不是只删除某个管理员公钥。

审计记录至少保留申请人、审批、key ID、序列号、principal、有效期、CA 指纹和撤销原因。CA 私钥最好置于离线介质、硬件令牌或受控签名服务,日常服务器不应能读取它。

安全上线顺序

先在一台非关键 VPS 建立 CA 信任与 principal 映射,签发数小时有效的测试证书,执行正反向用例;随后再灰度到生产。任何时候都保留独立的应急访问方式,并在变更结束后确认应急凭据受到额外保护。

OpenSSH 证书真正解决的是集中信任和短期授权,而不是把一把长期私钥换成另一把长期私钥。只有把签发、有效期、principal、撤销、日志与 CA 保管连成闭环,证书体系才比散落的 authorized_keys 更容易控制。

教程GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebR…

Cloudflare Workers 免费搭建开源远程桌面完整教程:无需 VPS,支持 WebRTC P2P、D1、KV、R2、浏览器远程控制、Windows 客户端和文件传输

GsDesk 是一款基于 Cloudflare Workers 与 VPS 自托管 的开源远程桌面项目,支持 WebRTC P2P 直连,服务端仅负责 API、身份认证和 WebSocket 信令,不中转桌面视频流,大幅降低服务器带宽成本。项目支持 Cloudflare 免费套餐 部署,也可以使用 Docker 在 VPS 上自托管,内置 Windows 客户端、浏览器控制端、手机远程控制,支持 8 位设备 ID、OTP 一次性密码、永久密码、Ed25519 设备认证、JWT 身份验证、文件传输、剪贴板同步、自动重连 等完整功能。

309 阅读

教程如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare…

CloudDisk:基于 Cloudflare Workers 的免费个人网盘,无需 VPS、MySQL,支持 R2+D1+KV 一键部署

如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare Workers 的开源项目 CloudDisk 值得看看。整个系统运行在 Cloudflare 免费套餐上,文件存储使用 R2,数据库使用 D1,会话数据使用 KV,不需要 MySQL,也不需要服务器。支持多用户登录、文件夹管理、分享链接、在线预览、Office 文档查看、文本在线编辑、大文件断点续传、协作者权限管理等功能。无论是个人备份、开发者存放代码文件、团队共享资料,还是搭建自己的私有网盘,都可以直接部署到 Cloudflare,一键完成,几乎零维护成本,非常适合独立开发者、个人站长和轻量团队使用。

288 阅读

教程很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安…

Linux 开启 DNS over HTTPS(DoH)教程:使用 Cloudflared + systemd 实现加密 DNS,防污染、防劫持

很多朋友在使用 Linux 服务器或者 VPS 时,经常会遇到 DNS 污染、解析慢、域名无法访问等问题。其实只需要安装 Cloudflare 官方的 cloudflared,并配合 systemd 自启动,就能让整个系统通过 DNS over HTTPS(DoH)进行加密解析。

238 阅读

常见问题

OpenSSH 用户证书和 HTTPS 证书一样吗?

不一样。OpenSSH 使用自己的简化证书格式,由 SSH CA 签署用户或主机公钥,不依赖浏览器信任链或公网 X.509 CA。

CA 私钥需要复制到每台 VPS 吗?

不需要,也不应这样做。服务器只保存 CA 公钥,CA 私钥应离线或放在受控签名环境中。

怎样限制证书只能登录特定账户?

签发时设置 principal,并在服务器通过 AuthorizedPrincipalsFile 为本地账户列出允许角色;两边匹配后证书才被接受。

短期证书还需要撤销机制吗?

需要。证书泄露或人员权限紧急变更时不能等待自然过期,可用 KRL 和 RevokedKeys 按证书、序列号或公钥撤销。

评价与回复

无需登录;审核通过后公开显示。