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

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

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

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

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

我确信我上传了正确的密钥。我已经验证指纹与 AWS 使用的奇怪指纹格式相匹配。但它就是无法解密。

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

我最终发现它没有删除末尾的换行符,因此删除了密钥中的空白行。但是,当我单击“解密密码”时,这又会给我带来新的错误:

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

答案1

AWS EC2 的密钥管理无法处理已设置密码(已加密)的 SSH 私钥。它无法检测到这种情况,只会失败并显示一个无意义的错误。

如果您的私钥以加密形式存储在磁盘上(就像 IMO 那样),您必须对其进行解密才能将其粘贴到 AWS 的控制台中。

与其这样做,不如考虑在本地解密密码,这样您就不必将私钥发送给 AWS。启动后从服务器日志中获取加密的密码数据(base64 编码),或者使用获取密码数据或相应的API请求。

然后您可以对结果进行 base64 解码和解密:

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

(OpenSSH 私钥被 接受openssl rsautl)。

无法处理受密码保护的密钥并出现有用错误的问题也会影响命令ec2-get-password

也可以看看:

答案2

这是我在 macOS 上工作的方法:

openssl rsa -in $HOME/.ssh/aws-remote -out /Users/home/desktop/unencrypted-rsa.txt

值得注意的是,您可以通过查找以下行来判断 .pem 文件是否已使用密码加密。如果存在,则需要先解密,然后才能将其用于 Amazon:

Proc-Type: 4,ENCRYPTED

答案3

即使不使用 jq,这仍然是可能的,但需要对返回的数据进行一些额外的解析。

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

答案4

最直接的选择是获取密码 AWS 文档链接发布在上面:

aws ec2 get-password-data --instance-id  i-1234567890abcdef0 --priv-launch-key C:\Keys\MyKeyPair.pem

另外,请考虑这一点:

重要的

私钥必须是PEM格式,例如使用ssh-keygen -m PEM生成PEM格式的OpenSSH密钥。

相关内容