Pack Camo

RSA 和 SSH 密钥对生成器

在你的设备上生成 PEM 和 OpenSSH 格式的 RSA、ECDSA 和 Ed25519 密钥对。

所有处理都在本地完成,不会上传任何内容。

正在生成密钥对…

无需安装任何软件即可生成 SSH 或 RSA 密钥对

本生成器使用浏览器的 Web Crypto API 创建新的 Ed25519、ECDSA(P-256、P-384、P-521)或 RSA(2048、3072、4096 位)密钥对,并按你的需要导出:与 <code>ssh-keygen</code> 生成的完全一致的 OpenSSH 私钥和 <code>authorized_keys</code> 行;供 OpenSSL、TLS 和 JWT 库使用的 PKCS#8 和 SPKI PEM 文件;公钥 JWK;以及 <code>SHA256:</code> 指纹。密钥在你的设备上生成,私钥永远不会离开此页面。

如何生成 SSH 密钥对

  1. 1选择密钥类型:Ed25519 是 SSH 的现代默认选择;旧服务器以及 PEM 或 JWT 签名密钥请选择 RSA。
  2. 2可以输入一条注释,通常是 user@host,方便以后在 authorized_keys 中识别该密钥。
  3. 3点击生成。将私钥下载为 id_ed25519(或 id_rsa、id_ecdsa),公钥使用相同名称加 .pub。
  4. 4将两者移到 ~/.ssh/,运行 chmod 600 ~/.ssh/id_ed25519,然后把公钥那一行添加到服务器的 ~/.ssh/authorized_keys 或 Git 服务的 SSH 密钥设置中。

应该选择哪种密钥类型?

Ed25519
体积小(公钥仅 68 个字符)、速度快,且不易因实现错误出问题。OpenSSH 6.5 及以上、GitHub、GitLab 和所有现代服务器均支持。是当今 SSH 的最佳选择。
ECDSA (P-256, P-384, P-521)
NIST 曲线,适用于合规规则要求使用,或不接受 Ed25519 的场景,例如部分硬件令牌和云密钥服务。
RSA
兼容性最广,包括非常老旧的 SSH 服务器以及许多 TLS 和 JWT 库(RS256)。需要用到 2030 年以后的密钥请至少使用 3072 位;2048 位是目前仍被认为可接受的最低长度。

格式说明

OpenSSH 私钥
<code>-----BEGIN OPENSSH PRIVATE KEY-----</code>,即 <code>ssh-keygen</code> 默认写出的格式。此处生成的私钥未加密;之后可用 <code>ssh-keygen -p -f id_ed25519</code> 添加密码短语。
OpenSSH 公钥
一行文本,<code>ssh-ed25519 AAAA… comment</code>,用于 <code>authorized_keys</code>、GitHub、GitLab 和云控制台。
PKCS#8 私钥(PEM)
<code>-----BEGIN PRIVATE KEY-----</code>,OpenSSL、Java、Node.js、Go 和大多数 JWT 库都能读取的通用标准容器,适用于任何密钥类型。
SPKI 公钥(PEM)
<code>-----BEGIN PUBLIC KEY-----</code>,X.509 SubjectPublicKeyInfo 形式,用于验证签名和 JWT 校验配置。
JWK
JSON 格式的公钥(RFC 7517),带有 <code>kid</code> 指纹,可直接发布到 JWKS 端点。

指纹

指纹是 SSH wire 格式公钥的 SHA-256 哈希,使用不带填充的 Base64 编码:SHA256:…。它就是 ssh-keygen -lf id_ed25519.pub 输出的内容、GitHub 在每个密钥旁显示的内容,也是 SSH 让你信任新主机时显示的内容。比较指纹即可确认两份公钥副本是否为同一个密钥。

在浏览器中生成密钥安全吗?

密钥由 crypto.subtle.generateKey 生成,这是浏览器内置的加密功能,使用操作系统的安全随机数生成器,与 ssh-keygen 使用的来源相同。没有任何数据通过网络发送:你可以加载此页面后断开网络,离线生成密钥。

对于保护生产系统的密钥,最安全的做法仍是在将要使用它的机器上用 ssh-keygen -t ed25519 生成,或使用硬件密钥。本工具非常适合测试环境、CI 部署密钥、JWT 签名密钥以及没有 OpenSSH 的机器。要查看基于此类密钥的证书,请使用证书解码器。

常见问题

如何在线生成 SSH 密钥?
选择 Ed25519,输入注释(例如你的邮箱),点击生成,然后下载私钥(id_ed25519)和公钥(id_ed25519.pub)。把两者放入 ~/.ssh,并将 .pub 中的那一行添加到服务器或 Git 服务。
Ed25519 比 RSA 更好吗?
对于 SSH 来说是的:Ed25519 密钥短得多、使用更快,安全性与 RSA-3072 相当。只有在系统不支持 Ed25519 时才选择 RSA。
为什么我的浏览器无法使用 Ed25519?
Ed25519 在 Firefox 129、Safari 17 和 Chrome 137 中才加入 Web Crypto API。如果浏览器较旧,请更新,或改选 ECDSA 或 RSA。
可以给私钥添加密码短语吗?
密钥生成时不带密码短语。请在自己的电脑上运行 ssh-keygen -p -f ~/.ssh/id_ed25519 添加,它会就地加密该文件。
如何把密钥转换为 PuTTY 的 .ppk 格式?
打开 PuTTYgen,选择 Load,选中下载的 OpenSSH 私钥,然后保存为私钥。PuTTYgen 可以直接读取 OpenSSH 格式。
哪个文件应该放到服务器上?
只放公钥,即 .pub 文件中的那一行,添加到 ~/.ssh/authorized_keys。私钥保留在你的电脑上,绝不应分享。
为什么 SSH 提示我的私钥权限过于开放?
SSH 会拒绝其他用户可读的私钥。对私钥文件运行 chmod 600,对 ~/.ssh 目录运行 chmod 700。
密钥会被发送到服务器吗?
不会。密钥由你浏览器的 Web Crypto API 在此页面中生成,在你下载或复制之前只存在于内存中。