openssh возвращает «неверный тип ключа» с помощью сгенерированной крипто пары ключей - PullRequest
1 голос
/ 03 октября 2019

Мне нужно сгенерировать пару ключей 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? * с успехом? Или возникла подобная проблема?

Спасибо за помощь! :)

1 Ответ

1 голос
/ 07 октября 2019

На самом деле проблема заключалась в ключе хоста, а не в сгенерированных ключах.

Но «чистый» метод не работает:

ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts

Единственный метод работы - добавлениеэти строки на /etc/ssh/ssh_config:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

Я не знаю почему. (если у кого-нибудь есть идея?)

Но в конце концов, ключи в порядке, вероятно, это ошибка при копировании / вставке (смеется)

Спасибо всем!

...