openssh返回带有加密生成的密钥对的“错误密钥类型”

时间:2019-10-03 16:04:33

标签: node.js docker openssh cryptojs

我需要在node js代码上生成一个rsa密钥对,以使其与openssh容器上的docker客户端一起使用。

我正在使用crypto的{​​{3}}函数生成密钥,并使用generateKeyPairparse[Private]Key将密钥从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不是已知的主机

搜索后,我发现了sshpk,并在.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

生成的私钥如下

this answer

有人成功地用cryptosshpk生成了密钥吗? 还是陷入类似的问题?

谢谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

问题实际上是主机的密钥,而不是生成的密钥。

但是“干净”方法不起作用:

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

唯一有效的方法是将这些行附加到/etc/ssh/ssh_config上:

Host *
   StrictHostKeyChecking no
   UserKnownHostsFile=/dev/null

我不知道为什么。 (如果有人有主意?)

但是最后,键还可以,这可能是复制/粘贴(大声笑)上的错误

谢谢大家!

相关问题