Node.js: Как преобразовать открытый ключ RSA в формат OpenSSH? - PullRequest
0 голосов
/ 22 декабря 2018

Я нахожусь на версии узла: 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 Ответ

0 голосов
/ 28 января 2019

Пакет 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);
    }
});
...