实际使用与边界

适用场景:分别选择算法、保存方式和授权层,再测试签发、恢复、轮换、撤销和审计,而不只是比较登录速度。

边界:支持范围和合规要求各不相同。客户端、策略和硬件会变化,部署前应核对当前兼容性。

先纠正一个常见误区:SSH 秘钥有四个层次

大家问‘哪种 SSH 秘钥最好’时,常常把不同层次混在一起。Ed25519、ECDSA、RSA、DSA 是密码算法;OpenSSH 与 PKCS8 是私钥序列化格式;普通文件、ssh-agent、FIDO2 安全密钥是保存和使用方式;authorized_keys 直放公钥或 SSH CA 签发的证书,则是授权组织方式。专业的设计应分别选择这四层。

一览比较:优势、短板与定位

Ed25519:现代默认,公钥和签名短、运算快、配置简单,但旧设备或受限合规环境可能不支持。ECDSA P-256/P-384:体积小,常见于策略驱动的环境,但需要明确曲线、库和实现,旧工具兼容性不如 RSA。RSA:旧服务器、网络设备和企业工具兼容面最广,但密钥大、运算更重;应避免使用 SHA-1 的 ssh-rsa 签名。DSA:只有 1024 位限制,现代 OpenSSH 默认禁用,不应新建。FIDO2:私钥操作留在硬件内,可要求触摸或用户验证,但需要备用设备和恢复方案。SSH 证书:适合集中签发与短期授权,却需要 CA、审计和吊销流程。

Ed25519:新部署的实用默认值

Ed25519 是现代椭圆曲线签名方案,RFC 8709 将其正式用于 SSH。它提供较小的公钥和签名、较快的签名与验证,以及简单的命令行工作流。个人 Linux 服务器、开发机、Git 和大多数人工交互登录都可以优先考虑它。限制主要来自运维环境:老旧网络设备可能不支持,部分合规边界限制算法集合,而且私钥一旦被复制,算法先进也不能消除泄露风险。

ECDSA:紧凑、策略友好,但不是自动更好

ECDSA P-256 或 P-384 在既有策略、硬件模块或互操作性要求下仍然实用。它的密钥和签名较小,现代实现也能正确处理随机数。但团队必须明确曲线、密码库和签名策略;历史上的 ECDSA 问题常常来自随机数或实现缺陷,而不是曲线名称本身。只有当它解决了真实的兼容性或政策要求时才应选择它。

RSA:兼容性工作马

RSA 在旧 SSH 服务、固件、网络设备和企业工具中拥有最广的安装基础。当某个必要系统不接受 Ed25519 或 ECDSA 时,RSA 仍是合理的迁移桥梁。新建长期身份时,在性能和政策允许的情况下优先考虑至少 3072 位,并确认客户端使用 rsa-sha2-256 或 rsa-sha2-512。ssh-rsa 指的是使用 SHA-1 的旧签名方法;RSA 密钥本身仍可配合现代 RSA 签名使用,不能把二者混为一谈。

DSA:只应被视为迁移遗留物

SSH DSA 受 1024 位上限限制,现代 OpenSSH 默认禁用 ssh-dss,没有理由新建 DSA。若旧设备只能接受 DSA,应限制网络范围、记录例外、升级设备,并在依赖消失后立即替换。不要为了一个旧设备而在全局重新打开遗留算法。

FIDO2 与硬件保护的 SSH 秘钥

OpenSSH 的 sk- 系列密钥可以把敏感私钥操作交给安全密钥或平台认证器。即使公钥被窃取,没有硬件也无法完成签名;触摸或用户验证还能降低钓鱼和文件窃取风险。代价是需要兼容设备、备用密钥或恢复方案,并正确处理 resident key、触摸策略、agent 支持和自动化任务。它很适合高价值人工登录,但 CI/CD 应使用范围窄、可撤销的机器身份,不要强迫每次部署都人工触摸硬件。

SSH 证书:升级的是生命周期管理

SSH 证书不是新的密码算法,而是由受信任 SSH CA 为用户或主机公钥签名。sshd 信任 CA 后,证书可以携带 principal、有效期、关键选项和扩展,不必把每个用户的原始公钥复制到每台服务器。它适合大规模集群和临时访问,但要保护 CA 私钥,建立签发、时钟同步、审计和紧急吊销流程。单台个人服务器用 authorized_keys 更简单,多主机多用户环境则常能从证书中获益。

不要把私钥文件格式当成算法

OpenSSH 与 PKCS8 只是序列化格式,不代表密码强度。BEGIN OPENSSH PRIVATE KEY 不自动等于 Ed25519,BEGIN PRIVATE KEY 也不自动等于 RSA。验证转换时应检查真实算法并从私钥导出公钥。不同客户端可能要求不同格式:移动应用可能要求 PKCS8,系统 ssh 更常用 OpenSSH。转换可以保留同一公钥身份,但会产生新的敏感副本,必须保护或删除。

应用场景:怎样选才合理

个人 Linux 服务器:带口令保护的 Ed25519 OpenSSH 文件、关闭不必要的 agent forwarding,并保留第二条恢复路径。开发机与 Git:人工使用 Ed25519;重要组织或账户可考虑 FIDO2。旧设备:使用符合最低要求的 RSA 与现代 rsa-sha2,隔离直到升级。CI/CD:使用短期或最小权限机器身份,最好由 broker 或 CA 签发,绝不复制个人私钥。大型集群:使用短有效期 SSH CA 证书、集中签发、日志和分离的用户/主机信任根。高保证管理员访问:FIDO2 加备用认证器和 break-glass 流程。

能经得住变化的决策框架

先确定主体是人、服务、主机还是临时会话,再列出客户端和服务端版本、合规边界、是否自动化、恢复要求与预期寿命。选择满足目标的最小信任范围,把算法和格式分别记录,并测试完整登录链路。评估时不要只看签名速度,还要看签发、备份、轮换、吊销、设备丢失、审计和事件响应。没有恢复与吊销机制的强算法,仍然是脆弱的运维系统。

加固清单

可导出的私钥使用口令和严格文件权限;保留主机密钥校验,并通过独立渠道核验变更指纹;尽量按设备或人员使用不同公钥;在恢复设计允许时关闭密码登录,但不要删除最后一条已测试的管理员通道;根据场景使用 authorized_keys 的 from、command、no-port-forwarding 等限制;记录负责人、用途、创建时间、最近使用、到期或复核日期;在疑似暴露、设备丢失、人员变化或权限范围变化后轮换。

最终建议

大多数新建的交互式 SSH 登录从 Ed25519 开始。真实存在旧设备兼容要求时选 RSA,特定政策或平台要求时选 ECDSA,高价值人工凭证需要抗导出保护时选 FIDO2;当身份数量和生命周期让 authorized_keys 难以治理时使用 SSH 证书。算法选择不能替代主机校验、最小权限、密钥清单、恢复和吊销。最好的 SSH 设计,是团队能解释、能审计、也能安全替换的设计。

常见问题

今天新建 SSH 登录应该选哪种秘钥?

通用 OpenSSH 登录通常从 Ed25519 开始,但要先确认客户端、服务端和合规策略支持它。

RSA 现在是不是不安全了?

RSA 并非自动不安全。使用足够长度,并配合 rsa-sha2-256 或 rsa-sha2-512;应避免的是使用 SHA-1 的旧 ssh-rsa 签名方法。

FIDO2 适合 CI/CD 吗?

它很适合高价值人工登录,但触摸或用户验证通常不适合无人值守任务。自动化应使用独立、最小权限、可撤销的机器身份或证书。

SSH 证书会替代公钥算法吗?

不会。证书是在用户或主机公钥上增加 CA 签名、身份和策略,底层算法仍然重要。

参考资料