支持的密钥类型
除非你的环境里有什么规定不允许,否则就用 ed25519。
ssh-keygen -t ed25519 -C "you@example.com"
它没有可以搞错的参数,生成的公钥短到一眼就能看完,而且 6.5 之后的每个 OpenSSH 版本都支持它。只有在确实有理由时才去选别的算法。
接受的类型
只有当公钥的第一个字段是下列之一,并且拼写完全一致时,它才会被接受:
| 类型 | 生成命令 | 说明 |
|---|---|---|
ssh-ed25519 | ssh-keygen -t ed25519 | 推荐 |
ssh-rsa | ssh-keygen -t rsa -b 4096 | 与老旧工具链的兼容性最广,但密钥大得多 |
ecdsa-sha2-nistp256 | ssh-keygen -t ecdsa -b 256 | NIST P-256 |
ecdsa-sha2-nistp384 | ssh-keygen -t ecdsa -b 384 | NIST P-384 |
ecdsa-sha2-nistp521 | ssh-keygen -t ecdsa -b 521 | NIST P-521 |
sk-ssh-ed25519@openssh.com | ssh-keygen -t ed25519-sk | 硬件安全密钥;需要 OpenSSH 8.2 或更高版本,并且连接时必须插着这个令牌 |
其他任何内容在添加时都会被拒绝,并返回 INVALID_SSH_KEY。
不接受的内容
| 你可能粘贴的东西 | 为什么会失败 |
|---|---|
ssh-dss(DSA) | 不在列表里;早已弃用,当前的 OpenSSH 已将其移除 |
sk-ecdsa-sha2-nistp256@openssh.com | ECDSA 的安全密钥变体不在列表里 —— 请改用 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 指纹,也就是那种较旧的、用冒号分隔的十六进制格式,在本产品中的任何地方都不使用。
如何取舍
ed25519 | ssh-rsa | ecdsa | |
|---|---|---|---|
| 公钥长度 | 大约 80 个字符 | 4096 位时大约 720 个字符 | P-256 为 160 个字符,P-521 为 252 个字符 |
| 你必须做的选择 | 没有 | 密钥长度 | 曲线 |
| 从哪个 OpenSSH 版本起支持 | 6.5 | 2.0 | 5.7 |
| 什么时候选它 | 默认情况下始终选它 | 你必须与早于 ed25519 的老旧工具链互通时 | 有规定要求使用 NIST 曲线时 |
如果你要用 ssh-rsa,至少生成 3072 位。Superheat 不会拒绝更短的 RSA 密钥,但短 RSA 密钥很弱,而且现代客户端越来越多地拒绝它们。
准备好用一个了吗?添加密钥。