我需要在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
我不知道为什么。(如果有人有想法?
但是最后,键还可以,这可能是复制/粘贴的错误(哈哈(
谢谢大家!