繁体   English   中英

如何使用php sdk下载aws的私钥RSA?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM