导入EC2密钥时,Openssh密钥格式形式形式为现有键



我正在使用Ruby EC2 SDK,版本2。用EC2生成的键的私钥材料存储在字符串中。我正在尝试生成使用OpenSSL::PKey::RSA

将密钥导入EC2的公共密钥材料

之后,我试图导入密钥对。

看起来像这样:

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,
})

希望它有帮助!

最新更新