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

问题描述 投票:2回答:1

我在节点版本:v10.14.1,我使用以下代码生成keyPairs:

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()生成?

node.js rsa openssh key-pair
1个回答
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);
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.