我需要在node js
代码上生成一个rsa密钥对,以使其与openssh
容器上的docker
客户端一起使用。
我正在使用crypto
的{{3}}函数生成密钥,并使用generateKeyPair的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.
搜索后,我发现了sshpk,并在.ssh/known_hosts
文件中添加了主机指纹:
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
但是什么都没有改变
为了测试密钥对,我已经记录了这个:
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
有人成功地用crypto
和sshpk
生成了密钥吗?
还是陷入类似的问题?
谢谢您的帮助! :)
答案 0 :(得分:1)
问题实际上是主机的密钥,而不是生成的密钥。
但是“干净”方法不起作用:
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
唯一有效的方法是将这些行附加到/etc/ssh/ssh_config
上:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
我不知道为什么。 (如果有人有主意?)
但是最后,键还可以,这可能是复制/粘贴(大声笑)上的错误
谢谢大家!