使用加密生成的密钥对打开 sh return "bad key type"
openssh return "bad key type" with a crypto generated key pair
我需要在 node js
代码上生成一个 rsa 密钥对,以便在 docker
容器上与 openssh
客户端一起使用它。
我正在使用 generateKeyPair function of crypto
to generate keys and parse[Private]Key
of 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 不是已知主机
经过搜索,我找到了this answer,我在.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
生成的私钥如下
有没有人已经用 crypto
和 sshpk
成功生成了密钥?
或者遇到过类似的问题?
感谢您的帮助! :)
问题确实是主机的密钥,而不是生成的密钥。
但是"clean"方法不起作用:
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
唯一可行的方法是在 /etc/ssh/ssh_config
上附加这些行:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
我不知道为什么。 (如果有人有想法?)
不过总算按键没问题了,估计是copy/paste弄错了(笑)
谢谢大家!
我需要在 node js
代码上生成一个 rsa 密钥对,以便在 docker
容器上与 openssh
客户端一起使用它。
我正在使用 generateKeyPair function of crypto
to generate keys and parse[Private]Key
of 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 不是已知主机
经过搜索,我找到了this answer,我在.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
生成的私钥如下
有没有人已经用 crypto
和 sshpk
成功生成了密钥?
或者遇到过类似的问题?
感谢您的帮助! :)
问题确实是主机的密钥,而不是生成的密钥。
但是"clean"方法不起作用:
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
唯一可行的方法是在 /etc/ssh/ssh_config
上附加这些行:
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
我不知道为什么。 (如果有人有想法?)
不过总算按键没问题了,估计是copy/paste弄错了(笑)
谢谢大家!