Node.js:如何将 RSA 公钥转换为 OpenSSH 格式?
Posted
技术标签:
【中文标题】Node.js:如何将 RSA 公钥转换为 OpenSSH 格式?【英文标题】:Node.js: How to convert RSA public key to OpenSSH format? 【发布时间】:2019-05-22 16:02:24 【问题描述】:我使用的是节点版本:v10.14.1,我使用以下代码生成密钥对:
generateKeyPair('rsa',
modulusLength: 4096,
publicKeyEncoding:
type: 'pkcs1',
format: 'pem'
,
privateKeyEncoding:
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: ''
, (err, publicKey, privateKey) =>
// Do stuff
);
这将创建一个这种格式的公钥:
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----
不幸的是,有时需要不同的格式。在我的情况下,将公钥上传到 AWS 需要 OpenSSH 格式,我认为是这样的:
ssh-rsa
...
如何将 RSA 公钥格式转换为 OpenSSH 格式或直接使用 generateKeyPair()
生成?
【问题讨论】:
【参考方案1】:node-sshpk 软件包可能会帮助您: https://github.com/joyent/node-sshpk
您可以使用pubKey.toBuffer()
,或者更复杂一点的pubKey.toBuffer('ssh')
。或者pubKey.toString('ssh')
,如果你需要它作为一个字符串。
在您的示例中,代码应该是这样的:
const generateKeyPair = require('crypto');
const sshpk = require('sshpk');
generateKeyPair('rsa',
modulusLength: 4096,
publicKeyEncoding:
type: 'pkcs1',
format: 'pem'
,
privateKeyEncoding:
type: 'pkcs8',
format: 'pem',
, (err, publicKey, privateKey) =>
if(err)
// handle Error
else
const pemKey = sshpk.parseKey(publicKey, 'pem');
const sshRsa = pemKey.toString('ssh');
console.log(ssh_rsa_2);
);
【讨论】:
很抱歉,您的回答花了这么长时间才接受,尽管它帮助(并且仍然)解决了我的问题。以上是关于Node.js:如何将 RSA 公钥转换为 OpenSSH 格式?的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 公钥/私钥对转换为 rsa.PrivateKey 和 rsa.PublicKey
如何将 JWK 中的公钥转换为 OpenSSL 的 PEM?