无需安装任何软件即可生成 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选择密钥类型:Ed25519 是 SSH 的现代默认选择;旧服务器以及 PEM 或 JWT 签名密钥请选择 RSA。
- 2可以输入一条注释,通常是
user@host,方便以后在authorized_keys中识别该密钥。 - 3点击生成。将私钥下载为
id_ed25519(或id_rsa、id_ecdsa),公钥使用相同名称加.pub。 - 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 在此页面中生成,在你下载或复制之前只存在于内存中。