Node.js:如何将RSA公钥转换为OpenSSH格式?

6

我正在使用 Node 版本: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()生成OpenSSH格式的公钥?
1个回答

8
节点-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);
    }
});

很抱歉花了这么长时间才接受你的答案,尽管它帮助(并且仍然)解决了我的问题。 - Jodo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接