我正在使用Ruby EC2 SDK,版本2。用EC2生成的键的私钥材料存储在字符串中。我正在尝试生成使用OpenSSL::PKey::RSA
之后,我试图导入密钥对。
看起来像这样:
kk=OpenSSL::PKey::RSA.new my_private_key_material
pub=kk.public_key
ec2.import_key_pair({key_name: "my_key", public_key_material: pub.export})
API正在抛出此错误:
*** Aws::EC2::Errors::InvalidKeyFormat Exception: Key is not in valid OpenSSH public key format
我不确定有什么问题以及如何正确生成公共密钥材料。我已经尝试在没有成功的情况下对base64进行编码。
编辑
我尝试了几个新事物。我从头开始使用EC2 Web控制台生成了一个新密钥
openssl rsa -in mykey.pem -outform PEM -pubout -out mykey.pub
密钥未加密。
乳清试图用Web控制台或代码导入公共密钥,我会遇到相同的错误。
编辑2
我找到了这个。
使用其他命令生成公共密钥时,它可以工作:
ssh-keygen -y
生成的公共密钥看起来不同。它以
开始ssh-rsa AAAAB3NzaC1yc2EAAAADA....
第一个生成的
开始-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG....
现在的问题是如何在Ruby中生成第一种格式。我还以不同格式找到了这篇文章。
好吧,我通过遵循此帖子解决了它。
事实证明,必须以不同的方式生成公共密钥
kk=OpenSSL::PKey::RSA.new my_private_key_material
key=kk.public_key
type = key.ssh_type
data = [ key.to_blob ].pack('m0')
openssh_format = "#{type} #{data}"
ec2.import_key_pair({key_name: "my_key", public_key_material: openssh_format})
文档表明必须在base64客户端端编码密钥内容,但是情况并非如此:应以" SSH-"为IS提供SSH密钥内容。RSA XXXXX ...."。
rory是正确的。在下面的nodejs中,代码工作。
let keypair = fs.readFileSync(homedir + '/.ssh/id_rsa.pub');
result = await ec2.importKeyPair({
KeyName: 'KeyPairName',
PublicKeyMaterial: keypair,
}).promise();
i m使用ruby sdk v3,这对我来说是有效的,以导入键
#!/usr/bin/env ruby
require 'rubygems'
require 'aws-sdk-ec2'
key_content = File.read('/home/xxx/keys/sshkey.pub')
ec2_client = Aws::EC2::Client.new()
resp = ec2_client.import_key_pair({
dry_run: false,
key_name: "test-ruby-key",
public_key_material: key_content,
})
希望它有帮助!