Мне нужно сгенерировать пару ключей rsa для кода node js
, чтобы использовать его с клиентом openssh
в контейнере docker
.
Я использую generateKeyPair функция crypto
для генерации ключей и parse[Private]Key
из sshpk для перевода ключей из формата pem
в openssh
.
моя функция:
import { generateKeyPair } from 'crypto';
import sshpk from 'sshpk';
const createSShKeys = () => {
return new Promise((resolve, reject) => {
generateKeyPair('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'pkcs1',
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs1',
format: 'pem',
},
}, (error, publicKey, privateKey) => {
if (error) {
reject(error);
} else {
const publicKeySShEncoded = sshpk
.parseKey(publicKey, 'pem')
.toString('ssh');
const privateKeySShEncoded = sshpk
.parsePrivateKey(privateKey, 'pem')
.toBuffer('ssh', {}) // toString('ssh') is documented, but I not find it in code.
.toString();
resolve({
publicKey: publicKeySShEncoded,
privateKey: privateKeySShEncoded,
});
}
});
});
};
Я создаю docker secret
с закрытым ключом и использую его внутри контейнера, но затем получаю:
Host key verification failed.
подсказка # 1: gitlab.com не является известным хостом
После поиска я нашел этот ответ и добавил отпечаток хоста в файл .ssh/known_hosts
:
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
Но ничего не изменилось
подсказка № 2: неправильные ключи
Чтобы проверить пару ключей, я зарегистрировал это:
const {
publicKey,
privateKey,
} = await createSShKeys();
console.log('#PUBLIC KEY');
console.log(publicKey);
console.log('#PRIVATE KEY');
console.log(privateKey);
И я сохранил закрытый ключ в файле. Я пытаюсь проверить это с помощью:
$ ssh-keygen -y -t private_key
bad key type
сгенерированный закрытый ключ выглядит следующим образом:
https://pastebin.com/2JC7kz9r
Кто-нибудь уже сгенерировал ключи с crypto
и * 1047? * с успехом? Или возникла подобная проблема?
Спасибо за помощь! :)