我一直在尝试在AWS Lambda上生成一个RSA密钥对,以取代当前在PuTTYgen上手动生成的密钥。PuTTYgen上生成的密钥是RSA类型,长度为2048,这将生成一个示例密钥(无注释),如下所示-
---- BEGIN SSH2 PUBLIC KEY ----
Comment: ""
AAAAB3NzaC1yc2EAAAABJQAAAQEAjloNCA4mycem+WTb49zUhYK7aRmg1uuorUvD
7GzE97C9EmmhUrVbp4d5dWF8zkT2sh5mRFrAnsSogxEtCzvh59mzbqUj+3Xw+xqJ
DMrHmnT8XKIGep++v3e+SV7RLio06ymp0H7zyHhbxLhZEnpGEKwkXmY53+RSUF7s
wfmvxS5mCo7677lbIZxGvvx65tT5as5m+ng7tKlqDAliuPl2vslyFhQw9B49cvOx
Z+UekK2iHD+DNCMQyxEelOru9YMwRozOwgtWPEyHcLinonAn2fUne28POsT3zXbv
rW10hkGH5JIHzGUoPxP6N7RRCnSN/NgS8rrHs51Skvhl0WzV6w==
---- END SSH2 PUBLIC KEY ----
现在我一直在尝试用下面的代码在NodeJS lambda上复制相同的代码-
const generation = util.promisify(crypto.generateKeyPair);
const result = await generation('rsa',{
modulusLength: 2048,
publicKeyEncoding: {
type: 'spki',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
}
});
console.log(result['publicKey']);
console.log(result['privateKey']);
在执行此lambda时,生成的公钥如下所示-
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnF1VDHq0vu5iL0nkbum8
cVzdhxiqmR6XcZbcsilF+Se6tlS9VAbN8QTTLdqwhJ5Dw7DvBGUXpCqUIqyT5IU5
wjQGnWHAWhPmalAgYWDwwdiOxxgd6NnNRR2Q5P4PSruxvFG7BtiSKGXSZpMzTIyZ
sXajEY2vhkf77bMEgzJhpXGAvzZsGEDi9jni8FCabVH6jvXh/svpmoCxwhQY1HHh
9RksscuAfllMwOE4uiQvfq6CpPNJUwU4kWtiaAtgX26nnPvqaUX52xMuYBrWQI2m
vUiXuxynqnrVSAFt/QY/0lMKRgnzwkq6YTIf8PeMQQA6TVQbtGN+j0MFQJDxF2/l
dQIDAQAB
-----END PUBLIC KEY-----
就我对RSA密钥的理解而言,第一行和最后一行不应该有任何区别,因为它们基本上是注释。但是我看到PuTTYgen键由大约5和1/2行内容组成,而NodeJS键有6行内容。两者都有2048的长度,为什么两者会有区别呢?
非常感谢。
感谢您的评论,帮助我更好地理解密钥的格式。使用NodeJS代码生成的密钥是PEM格式的,需要将其转换为OpenSSH格式以匹配PuTTYgen的输出密钥。
模块sshpk有助于将PEM密钥转换为OpenSSH格式。执行此操作的代码如下所示-
var sshpk = require('sshpk');
let pemPublicKey = sshpk.parseKey(publicKey, 'pem');
let openSSHPublicKey = pemPublicKey.toString('ssh');
console.log(openSSHPublicKey);
这将产生一个具有以下格式的键-
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqWWfYMm/q1Ee4AzRJMc+BgsqzVIZgwTidGDb6E3V2EQ85+iX09pmDF8E23Fsmd9WoUMB2L/FXUIlWZmofPmoInKk740UcsQGT0MVYQfDAiVBqrbymIR/lMBCirFpFq7hIDzACgWYAmSEFtDBdP4LmFozx6Vi3+Ss5g8EjkXcDLkPiBSM8YjCQO6CraH1dMIC4/hywitL1G2rngFdwgFAuG1HEqgXZKRZAm2043OVY2SDVnMvHcYjarPk94BydZ7mzZRCdaetDY73+8opVL0uRol2GfYwAoediz65iIm183w4p4F3JH09W4xSoT8FeTRfIc2iAlde3wFA6aK/NV0G5 (unnamed)
使用parseKey()
方法时,可以通过添加名称来删除末尾的(未命名)。
现在,您可以按照以下要求格式化此字符串-
let openSSHPublicKeyMaterial = openSSHPublicKey.split(" ")[1];
let formattedSSH2KeyArray = []
formattedSSH2KeyArray.push('---- BEGIN SSH2 PUBLIC KEY ----');
formattedSSH2KeyArray.push('Comment: ""');
for (let index = 0; index <= openSSHPublicKeyMaterial.length; index += 64 ) { // 64 corresponds to the number of characters in a single line
let singleLine = openSSHPublicKeyMaterial.substring(index, index + 64);
formattedSSH2KeyArray.push(singleLine);
}
formattedSSH2KeyArray.push('---- END SSH2 PUBLIC KEY ----');
let formattedSSH2Key = formattedSSH2KeyArray.join('\n');
console.log(formattedSSH2Key);
执行上述部分将为您提供所需格式的密钥-
---- BEGIN SSH2 PUBLIC KEY ----
Comment: ""
AAAAB3NzaC1yc2EAAAADAQABAAABAQCqWWfYMm/q1Ee4AzRJMc+BgsqzVIZgwTid
GDb6E3V2EQ85+iX09pmDF8E23Fsmd9WoUMB2L/FXUIlWZmofPmoInKk740UcsQGT
0MVYQfDAiVBqrbymIR/lMBCirFpFq7hIDzACgWYAmSEFtDBdP4LmFozx6Vi3+Ss5
g8EjkXcDLkPiBSM8YjCQO6CraH1dMIC4/hywitL1G2rngFdwgFAuG1HEqgXZKRZA
m2043OVY2SDVnMvHcYjarPk94BydZ7mzZRCdaetDY73+8opVL0uRol2GfYwAoedi
z65iIm183w4p4F3JH09W4xSoT8FeTRfIc2iAlde3wFA6aK/NV0G5
---- END SSH2 PUBLIC KEY ----
我试图通过遵循本教程在heroku上部署php应用程序https://devcenter.heroku.com/articles/getting-started-with-php#introduction 当前正在执行此步骤https://devcenter.heroku.com/articles/getting-started-with-php#deploy-应用程序 当我运行命令“git pu
我正在使用并且不给密码短语,然后成功生成并显示密钥指纹。 然后给然后它在提供后提示输入我的用户密码时会说明添加的密钥数:1。 现在,如果我正在执行它会再次提示输入密码。 如果我执行也是它会请求输入密码。 PS:我使用过:和每次执行时,系统提示我输入密码,似乎没有什么工作正常。 [编辑] 显示 debug1:SSH2_MSG_KEXINIT已发送 debug1:SSH2_MSG_KEXINIT已接收
我正在使用密钥对模块 它可以正常工作创建公钥和私钥 我的公钥: 我正在使用Jsencrypt 使用那个公钥不起作用..数据未加密 但是jsencrypt生成公钥工作正常。你可以帮我吗? 如何使用我的生成密钥对RSA公钥在js加密?
我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id
本文向大家介绍Python生成rsa密钥对操作示例,包括了Python生成rsa密钥对操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python生成rsa密钥对操作。分享给大家供大家参考,具体如下: 对文件进行RSA加密解密 PS:关于加密解密感兴趣的朋友还可以参考本站在线工具: 在线RSA加密/解密工具: http://tools.jb51.net/password/rsa_e
我用PHP OpenSSL生成了一个SSH密钥: 这导致$pem如下所示: 但是我无法使用此密钥进行身份验证。在使用它之前,我必须使用以下命令转换它: 转换的结果如下: 两者都是PEM格式,但第二个是RSA私钥。使用第二个,PHP可以登录。所以我需要一个以开头的密钥,而不仅仅是。如何使用PHP和OpenSSL PHP实现创建它?