OpenSSH返回"bad key type",其中包含加密生成的密钥对



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

我正在使用crypto的生成密钥对函数来生成密钥,并使用 sshpk 的parse[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 不是已知的主机

搜索后,我找到了这个答案,并在.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地生成了密钥并成功sshpk? 还是类似的问题?

感谢您的帮助! :)

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

但是"干净"方法不起作用:

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

唯一的工作方法是将这些行附加到/etc/ssh/ssh_config

Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null

我不知道为什么。(如果有人有想法?

但是最后,键还可以,这可能是复制/粘贴的错误(哈哈(

谢谢大家!

最新更新