SSH 密钥套件

SSH 密钥认证用一对数学上关联的密钥代替密码:私钥永远不离开你的电脑,公钥安装在你登录的每一台服务器上。服务器向你的电脑发出挑战,要求它证明自己持有私钥,而证明过程无需秘密经过网络。本页生成 OpenSSH 格式的 Ed25519、ECDSA 与 RSA 密钥,审计你的 authorized_keys 与 known_hosts 文件,找出弱密钥、重复密钥与过期密钥,并在 PEM、OpenSSH 与 JWK 格式之间转换密钥——全部在浏览器中完成,不上传任何内容。配套指南SSH 密钥详解讲解如何选择密钥类型,以及密钥泄露时该做什么。还可以搭配密码泄露检查检查你仍在用的密码,以及证书密钥匹配器与PGP 套件处理其余密钥材料。

最后更新:

你的私钥永远不会离开本页

所有密钥都在浏览器中生成、解析与转换。私钥永远不会被上传、存储或记录,也不会出现在 URL 中。下载一次,用 chmod 600 保护它,需要口令时用 ssh-keygen -p 添加。完整指南见SSH 密钥详解。

生成新的 SSH 密钥对

诚实的局限

第 1 版生成的是未加密密钥:这里没有口令选项,因为 OpenSSH 加密私钥的 bcrypt KDF 属于第 2 版的范围。请用 chmod 600 保护下载的文件,需要口令时用 ssh-keygen -p 添加。

Ed25519 生成需要较新的浏览器。如果你的浏览器不支持,本页会明确告诉你,并提供 ECDSA P-256 作为替代——绝不会伪造 Ed25519 密钥,也不会悄悄降级。

永远不要把私钥粘贴进聊天、工单、论坛帖子或共享文档——哪怕是问它是否安全。私钥一旦出现在任何这类地方,就必须当作已经泄露:换掉它,并从每一个 authorized_keys 文件中删除旧公钥。

什么是 SSH 密钥认证——以及它为什么胜过密码

SSH 密钥认证用数学证明代替输入的秘密。用密钥登录服务器时,服务器向你的电脑发送一个随机挑战;你的电脑用私钥对它签名,服务器再用 authorized_keys 中的公钥验证签名。私钥从不经过网络,因此键盘记录器无物可偷,钓鱼无物可钓,暴力破解也无从下手——攻击者无法像破解密码那样破解 256 位的 Ed25519 密钥,因为根本没有密码可以尝试。

密钥的两半遵循相反的规则。公钥就是用来到处复制的:粘贴进每一台服务器的 authorized_keys、Git 托管账户、任何接受它的服务。它只能让对方验证证明,公布它没有任何代价。私钥则恰恰相反:持有它的人就能以你的身份登录每一台信任对应公钥的服务器。这就是为什么它住在 ~/.ssh 里,只有你能读取,也是为什么它绝不能粘贴进聊天、工单、邮件或共享文档——一旦出现在任何这类地方,它就是泄露了,唯一的修复办法是在所有地方换掉它。

选择密钥、核对指纹、保持文件整洁

2026 年的默认选择是 Ed25519:256 位密钥,生成与签名都比 RSA 更快,公钥只有短短一行。当政策或旧系统坚持要求 NIST 曲线时,ECDSA P-256 是替代选择;只有当对方完全无法使用椭圆曲线时,才轮到 RSA 3072 或 4096——RSA 2048 是下限,更小的密钥会被本页标记为弱密钥。密钥类型的重要性不如围绕它的使用习惯:一个放在全世界可读的文件里、或复制到你已不再拥有的笔记本上的强密钥,比一个保管得当的普通密钥更糟糕。

指纹的作用是让你确认自己在和正确的机器对话。第一次连接服务器时,SSH 会显示服务器主机密钥的指纹并请你确认;这个指纹是服务器公钥的哈希,如果与管理员公布的一致,就没有中间人坐在中间。保存它,之后一旦变化,SSH 会大声警告你。同样的指纹也标识你自己的密钥:ssh-keygen -lf 为每个密钥打印一行,而本页打印的指纹格式与它完全一致,因此这里看到的值可以与服务器上的值逐字比对。

这些文件值得定期审计,因为密钥只会越积越多。authorized_keys 的每一行都是一扇通往服务器的门,而这些门会在需要它的人离开很久之后依然开着:外包人员的笔记本、某个 CI 任务、在已被擦除的机器上生成的密钥。把文件粘贴进「检查」选项卡,本页会统计密钥数量,标记重复项,标出弱密钥与旧类型,并把无法解析的行列出来,而不是悄悄丢掉。known_hosts 也一样,其中的哈希条目隐藏了主机名——本页会把它们报告为已哈希,而不是假装可读。每隔几个月花十分钟审计一次,是服务器主人做过的最划算的安全工作。

用通俗的话说明这个套件

Ed25519现代椭圆曲线密钥:256 位,速度快,体积小。2026 年新密钥的推荐默认选择,所有当前 SSH 服务器与客户端都支持。
ECDSA P-256 / P-384基于 NIST P-256 与 P-384 曲线的椭圆曲线密钥。当 Ed25519 不可用时是很好的替代,也是政策要求 NIST 曲线时的标准选择。
RSA 2048 / 3072 / 4096经典密钥类型。RSA 2048 是值得使用的下限;3072 与 4096 以更慢的签名换取更大的安全余量。低于 2048 的会被标记为弱密钥。
公钥安装在服务器 authorized_keys 中的一半,可以自由分享——它只能让对方验证证明,永远无法伪造证明。
私钥永远不离开你电脑的一半。持有它的人就能以你的身份登录。用 chmod 600 与口令保护它,永远不要把它粘贴到任何地方。
指纹公钥的短哈希,显示为 SHA256:… 或 MD5:…,与 ssh-keygen -lf 的输出完全一致,方便你与服务器上显示的值逐字比对。
authorized_keys服务器上的文件(~/.ssh/authorized_keys),列出允许登录的公钥。每一行都是一扇门;过期的行是你忘记关上的门。
known_hosts你电脑上的文件(~/.ssh/known_hosts),记录每台服务器的主机密钥。正是它让 SSH 能在服务器密钥突然变化时向你发出警告。
PEM / JWK另外两种密钥编码:PEM 是 TLS 工具与 OpenSSL 使用的 base64 文本格式;JWK 是 Web API 使用的 JSON 格式。转换永远不会改变密钥本身。

常见问题

我该选择哪种密钥类型?

几乎所有情况都选 Ed25519:256 位,速度快,体积小,安全性高,所有当前服务器都支持。只有当政策或旧系统要求 NIST 曲线时才选 ECDSA P-256;只有当对方完全不支持椭圆曲线时才选 RSA 3072 或 4096。

生成的私钥是加密的吗?

不是。第 1 版生成的私钥未加密,cipher 为 none,与不带口令的 ssh-keygen 完全一样。下载后设置 chmod 600;想要口令时,在自己的电脑上运行 ssh-keygen -p -f 你的密钥——它会加上 OpenSSH 的 bcrypt 保护。

为什么 Ed25519 在我的浏览器里失败?

Ed25519 密钥生成需要浏览器支持 WebCrypto Ed25519,旧浏览器没有这个能力。本页会检测并明确告诉你,而不是伪造密钥。请用 ECDSA P-256 作为替代,或升级浏览器后重试。

我可以把私钥粘贴到这里检查吗?

可以粘贴未加密的 OpenSSH 私钥,本页会在本地解析它的公开部分——但请三思。更安全的做法是只粘贴公钥与 authorized_keys 文件。受口令保护的私钥会被明确拒绝,绝不会被解析。

密钥泄露了怎么办?

生成一对新密钥,从每一台服务器与服务的 authorized_keys 中删除旧公钥,并把旧密钥能触及的一切都当作已经暴露,直到你逐一检查过。完整清单见指南《SSH 密钥详解》。