【问题标题】:Node.js: How to convert RSA public key to OpenSSH format?Node.js:如何将 RSA 公钥转换为 OpenSSH 格式?
【发布时间】: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() 生成?

【问题讨论】:

    标签: node.js rsa openssh key-pair


    【解决方案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);
        }
    });
    

    【讨论】:

    • 很抱歉,您的回答花了这么长时间才接受,尽管它帮助(并且仍然)解决了我的问题。
    猜你喜欢
    • 2011-07-28
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2019-11-15
    • 2014-09-12
    • 2016-10-03
    相关资源
    最近更新 更多