即使使用正确的私钥,Windows密码也不会在AWS EC2上解密

我在AWS EC2上创build了一个新的Windows实例,使用通过从本地机器上传我的公钥创build的密钥对。

实例启动正常,但不会解密密码。 它报告:

私钥必须以“----- BEGIN RSA PRIVATE KEY -----”开头,并以“----- END RSA PRIVATE KEY -----”结尾。

我确定我上传了正确的密钥。 我已经validation指纹与AWS使用的怪异指纹格式相匹配 。 但它不会解密。

我已经尝试上传密钥文件,并将其粘贴到表单中。

我最终发现它并没有去掉尾随的换行符,而是删除了键中的空行。 但是,当我单击“解密密码”时,这只是让我遇到新的错误:

解密密码时出错。请确保您输入了正确的私钥。

AWS EC2的密钥pipe理不能处理设置了密码(已encryption)的SSH私钥。 它没有检测到这一点,只是失败的一个无误的错误。

如果您的私钥在磁盘上被encryption存储(就像它应该是IMO),您必须将其解密才能将其粘贴到AWS的控制台中。

而不是这样做,请考虑在本地解密密码,所以您不必将私钥发送给AWS。 在启动后从服务器日志中获取encryption的密码数据(base64编码),或使用get-password-data或相应的API请求。

然后你可以base64解码和解密结果:

base64 -d /tmp/file | openssl rsautl -decrypt -inkey /path/to/aws/private/key.pem 

(OpenSSH私钥被openssl rsautl接受)。

未能处理带有有效错误的密码保护密钥的问题也会影响到ec2-get-password命令 。

也可以看看:

  • EC2 Windows – 获取pipe理员密码
  • 用OpenSSL解密密码
  • AWS论坛上的错误报告 – 请join。

没有使用jq,这仍然是可能的,但需要一些额外的parsing返回的数据。

 aws ec2 get-password-data "--instance-id=${instance_id}" --query 'PasswordData' | sed 's/\"\\r\\n//' | sed 's/\\r\\n\"//' | base64 -D | openssl rsautl -inkey ${my_key} -decrypt 

在我的Mac上,base64的命令行参数是不同的。

这对我工作:

 base64 -D -i /tmp/file | openssl rsautl -decrypt -inkey /path/to/key.pem