[英]how to download private key RSA of aws using php sdk?
我已经成功地集成了 AWS php SDK 来创建实例,但是我在本地存储库上下载或导出密钥对“RSA PRIVATE KEY”时遇到了问题,当我打印数组时,它是可见的,但是当我通过它的密钥打印时,它是不显示在屏幕上,文件下载为空
这是 AWS PHP SDK 的脚本
$ec2Client = Ec2Client::factory(array(
'version' => 'latest',
'region' => REGION,
'credentials' => $credentials
));
// Create the key pair
$keyPairName = 'key';
$result = $ec2Client->createKeyPair(array(
'KeyName' => $keyPairName
));
$saveKeyLocation = 'C:/Users/user/Desktop'. "/.ssh/{$keyPairName}.pem";//getenv('HOME') . "/.ssh/{$keyPairName}.pem";
// Save the public key in public.pem file
file_put_contents($saveKeyLocation, $result['KeyMaterial']);
// Update the key's permissions so it can be used with SSH
chmod($saveKeyLocation, 0600);
当我打印 $result 时,它给了我完整的数组,但是当我用它的键 $result['KeyMaterial'] 打印时,它是空的,并且文件也以空的形式下载。
这是 $result 数组
Aws\Result Object
(
[data:Aws\Result:private] => Array
(
[KeyFingerprint] => 10:46:e4:73:ec:b7:63:8b:98:20:b4:9d:e3:52:9d:1f:57:65:8c:e0
[KeyMaterial] => -----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAySsM6nbCpYxWtE/Xlyj+heD7lKTFo3KrguLKBiRVIitG1eUx
FfxSSVCFs+ePGfjKTpS96e4ybnr9IiLosTlMBMm81wbtaIR3a1zcenKWrgFI6xyA
mdDwGL2C4e5Ha8pnEQkgXnEbulAlkn3v95wHtIUxIAh1nwCiIMbsk4Q518D7lLUo
fATvyPj3PVHXNvD4K6eI6gWOLUtqLG6MNQI7w0nURoHUqMBsHsVg/Tml8/bCbP8p
................................................................
........................................BQZuKvceZxPGykX5tUSD1LwT
TWekB3MMGaTtW98nNdwOIdMdFDv7PRClzDaaPp7K4YsFiFvuTLq91m8Gsw3uEzpL
sJSJsilmL/jp1IgLm7RwHqq6ev/Y9VADKt/olxMCgYAZFW23pgkqEemhTDI9+q5C
UDup0CAouNASuudJOYxakcUo0mcm2lqAqixXA+W3DvtCHRJdhutWBNk3pYk5Ei6m
ABFQAckNf6.........................................7mSZC7Ck02UDd
l1w/dBpSaRDTqTql00RHyQKBgQC1J2DR7plvKrEFOmW++PIfhL5aI9vW7GeV0D/k
IHDMWovSb+sFF+GQsz3JEYv1ZBlkTajQSEVT8ELFKZC9d4yWtDq1DwRRW/7wECLE
NZAccLUQdAnX0JLk2gG8zKrj0jCeSmSqsj74YKNPVzlbeZjHP2qiUOJcfPXsCRJ1
VuELjwKBgH9J+g7Iukc1OqRZISFOJlmOMqpancjps0ZH/yosmnRusT+x+mrMEvuJ
zs56DzU3rG2asijhntBpEAj5IT0BfxWebh0W0PRxlOSfwxZBcOfwQyLigBFcUerB
USi8kmtydjocjiQBkLShtDTEJ+TfJfkAg2f35mtn/gEvPusNRh19
-----END RSA PRIVATE KEY-----
[KeyName] => mya-keaaaykpair-m1
[KeyPairId] => key-0a7b8707dd11fbd7f
[@metadata] => Array
(
[statusCode] => 200
[effectiveUri] => https://ec2.us-east-1.amazonaws.com
[headers] => Array
(
[x-amzn-requestid] => 532daf73-*****-****-b9df-f1b43c4b75d1
[content-type] => text/xml;charset=UTF-8
[content-length] => 2095
[vary] => accept-encoding
[date] => Thu, 24 Sep 2020 08:36:10 GMT
[server] => AmazonEC2
)
[transferStats] => Array
(
[http] => Array
(
[0] => Array
(
)
)
)
)
)
[monitoringEvents:Aws\Result:private] => Array
(
)
)
请让我知道我该如何解决? 因为下载成功后我会使用puttygen转换成ppk文件格式
你的问题是关于你的语法
您的元素是一个对象,但您通过数组语法从中获取参数
使用以下之一:
echo($result->KeyMaterial);
// or
echo($result->data->KeyMaterial);
并让我们知道结果
编辑:
正如我看到的你的代码,你正在使用他们在他们的网站上以 pdf 格式留下的 self docs.aws.amazon.com 的样本,你的代码与他们的样本非常相似
但是您的代码有一个简单的区别,那就是您使用静态“工厂”方法
如果您使用亚马逊在此链接中编写的 SDK,请尝试此代码,如果没有,请使用它来查看您的问题是否解决:
$ec2Client = new Aws\Ec2\Ec2Client([
'region' => REGION,
'version' => 'latest',
'credentials' => $credentials
]);
$keyPairName = 'my-keypair';
$result = $ec2Client->createKeyPair(['KeyName' => $keyPairName]);
// Save the private key
$saveKeyLocation = 'C:/Users/user/Desktop'. "/.ssh/{$keyPairName}.pem";
file_put_contents($saveKeyLocation, $result['keyMaterial']);
如果尝试此操作后您的问题仍未解决,请尝试使用 S3Client 库代替 Ec2Client,因为亚马逊通过此客户端编写了他们的示例
最后很抱歉,因为我对您的问题的详细信息较少。 我不使用这个库,只有我对 php 的经验才能帮助你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.