我在 AWS EC2 上创建了一个新的 Windows 实例,使用从本地机器上传公钥创建的密钥对。
实例启动正常,但无法解密密码。它报告:
我确信我上传了正确的密钥。我已经验证指纹与 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密钥。