跳到主要内容
ecdsa.com

OpenSSH 私钥格式

自 OpenSSH 7.8(2018年)起 ssh-keygen 默认写出的 openssh-key-v1 容器,以 -----BEGIN OPENSSH PRIVATE KEY----- 形式存储,设置密码短语时用基于 bcrypt 的 KDF 加密。
其他写法BEGIN OPENSSH PRIVATE KEYopenssh-key-v1PROTOCOL.key

该格式规定在 OpenSSH 的 PROTOCOL.key 中:魔数字符串 openssh-key-v1 加一个零字节、加密算法名称(none 或 aes256-ctr)、KDF 名称(none 或 bcrypt)及其盐和轮数(默认 16,可用 ssh-keygen -a 调高)、公钥,以及一个加密部分,其中包含重复两次的校验整数(用于发现密码短语错误)、私钥和注释。Ed25519 密钥一直使用这种格式;自 7.8 起,除非指定 -m PEM,RSA 和 ECDSA 密钥也使用它。

较旧的库和工具只能读取 PEM(PKCS #1、SEC 1 或 PKCS #8):早期的 JSch、一些 CI 服务以及使用标准密钥规范的 Java 代码会报出 invalid privatekey 之类的错误。可以用 ssh-keygen -p -m PEM -f key 转换(直接改写原文件),或用 ssh-keygen -e -m PKCS8 导出公钥。公钥仍采用单行的 type base64 comment 形式。

标准与参考资料

全部术语