跳到主要内容

支持的密钥类型

除非你的环境里有什么规定不允许,否则就用 ed25519。

ssh-keygen -t ed25519 -C "you@example.com"

它没有可以搞错的参数,生成的公钥短到一眼就能看完,而且 6.5 之后的每个 OpenSSH 版本都支持它。只有在确实有理由时才去选别的算法。

接受的类型

只有当公钥的第一个字段是下列之一,并且拼写完全一致时,它才会被接受:

类型生成命令说明
ssh-ed25519ssh-keygen -t ed25519推荐
ssh-rsassh-keygen -t rsa -b 4096与老旧工具链的兼容性最广,但密钥大得多
ecdsa-sha2-nistp256ssh-keygen -t ecdsa -b 256NIST P-256
ecdsa-sha2-nistp384ssh-keygen -t ecdsa -b 384NIST P-384
ecdsa-sha2-nistp521ssh-keygen -t ecdsa -b 521NIST P-521
sk-ssh-ed25519@openssh.comssh-keygen -t ed25519-sk硬件安全密钥;需要 OpenSSH 8.2 或更高版本,并且连接时必须插着这个令牌

其他任何内容在添加时都会被拒绝,并返回 INVALID_SSH_KEY

不接受的内容

你可能粘贴的东西为什么会失败
ssh-dss(DSA)不在列表里;早已弃用,当前的 OpenSSH 已将其移除
sk-ecdsa-sha2-nistp256@openssh.comECDSA 的安全密钥变体不在列表里 —— 请改用 ed25519-sk
ssh-ed25519-cert-v01@openssh.com 这类证书Superheat 接受的是普通公钥,不是证书
PuTTY 的 .ppk 文件它不是 OpenSSH 公钥;请改从 PuTTYgen 里复制 OpenSSH 格式的文本
任何以 -----BEGIN 开头的内容那是私钥 —— 参见生成密钥

格式

一行,两个字段,外加一个可选的注释:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8mQ2sT9vXbN1kR4pLwZ0aYcE7hJ6uD3fGgH5iKmNoP you@example.com
字段是否必需检查什么
类型必须与接受的列表完全一致
密钥内容按严格的 base64 解码,且长度不能短到不可能是一个密钥
注释与密钥行一起保存,计算指纹时被忽略

末尾的换行会自动为你去掉。开头的空格或空行不会 —— 控制台表单从粘贴内容的第一个字符开始检查,并会以“这看起来不像 OpenSSH 公钥”为由拒绝它,所以粘贴时要从密钥类型开始。在密钥内容中间插入的换行同样会毁掉它:有些编辑器和聊天客户端在你粘贴时会对长行折行。请用生成密钥里的某个命令直接从文件复制。

指纹

Superheat 会从密钥内容派生出一个 SHA256 指纹,并在 SSH 密钥页面上显示在密钥名称下方:

SHA256:Pr6lxPUhwJ7+VHus18B6LLkVm4mFu0L9hn8eqgpOyag

它和 OpenSSH 计算出来的指纹一致,所以你可以在本地确认账户里的到底是哪一个密钥:

ssh-keygen -lf ~/.ssh/id_ed25519.pub

指纹也是密钥的身份标识。同一个账户下的两条记录不能用不同的名称承载相同的密钥内容 —— 第二次尝试会返回 DUPLICATE_SSH_KEY。MD5 指纹,也就是那种较旧的、用冒号分隔的十六进制格式,在本产品中的任何地方都不使用。

如何取舍

ed25519ssh-rsaecdsa
公钥长度大约 80 个字符4096 位时大约 720 个字符P-256 为 160 个字符,P-521 为 252 个字符
你必须做的选择没有密钥长度曲线
从哪个 OpenSSH 版本起支持6.52.05.7
什么时候选它默认情况下始终选它你必须与早于 ed25519 的老旧工具链互通时有规定要求使用 NIST 曲线时

如果你要用 ssh-rsa,至少生成 3072 位。Superheat 不会拒绝更短的 RSA 密钥,但短 RSA 密钥很弱,而且现代客户端越来越多地拒绝它们。

准备好用一个了吗?添加密钥