我使用生成了我的公钥/私钥对
ssh-keygen -t rsa -b 2048 -v
然后需要一个 .pem 文件并按照此操作https://serverfault.com/questions/706336/how-to-get-a-pem-file-from-ssh-key-pair
ssh-keygen -f id_rsa -e -m pem
-----BEGIN RSA PUBLIC KEY-----
但后来我发现了这个https://gist.github.com/mingfang/4aba327add0807fa5e7f
openssl rsa -in ~/.ssh/id_rsa -outform pem
-----BEGIN RSA PRIVATE KEY-----
为什么输出不同?
答案1
它们就是这样写的; OpenSSH 通过调用函数PEM_write_RSAPublicKey(stdout, k->rsa)
来发出公钥材料,而 OpenSSL 则对给定的私钥进行操作。使用 OpenSSH,我想大多数情况是将公钥转换为可在某些外部服务器上使用的形式,而私钥在客户端系统上保持私有,因此对密钥对的公钥进行操作是有意义的。使用 OpenSSL,就不存在“将公钥转换为适合其他 SSH 服务器的形式”的问题,因此代码可以直接对私钥进行操作。不同的代码,不同的意图,不同的结果。do_convert_to_pem
ssh-keygen.c
答案2
对于该openssl rsa
命令,您需要该-pubout
标志来输出公钥而不是私钥。要将其输出为 RSA 公钥(按照这种方式ssh-keygen -e
),请改用该-RSAPublicKey_out
标志:
openssl rsa -in id_rsa -outform PEM -RSAPublicKey_out
-----BEGIN RSA PUBLIC KEY-----
这给出了相同的输出
ssh-keygen -e -f id_rsa -m pem
-----BEGIN RSA PUBLIC KEY-----
仅当我创建密钥的原始命令包含该标志时,该openssl
命令才适用于我。ssh-keygen
-m PKCS8