0

我需要知道不同的 aws ec2 区域我知道 aws 有用于此的命令行工具,但我想使用 aws api 所以我生成了以下查询请求以访问 aws ec2 api

https://ec2.amazonaws.com/?Action=DescribeRegions&AWSAccessKeyId= &Version=2013-02-01&Timestamp=2013-05-24T12%3A35%3A00Z&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature=xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0=

为此我得到了以下回复

<?xml version="1.0" encoding="UTF-8"?>
* Connection #0 to host ec2.amazonaws.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):
<Response>
<Errors>
 <Error>
   <Code>InvalidAction</Code>
   <Messaged >The action urn:Post is not valid for this web service.</Message>
</Error></Errors>
<RequestID>4a33917f-3403-4ebc-9a85-4b5393a031c6</RequestID>
</Response>

[1] 完成 curl -v -get --data-urlencode 数据https://ec2.amazonaws.com/?action=DescribeRegions

[2] 完成 AWSAccessKeyId=

[3] 完成版本=2013-02-01

[4] 完成时间戳=2013-05-24T12%3A35%3A00Z

[5]- 完成签名版本=2

[6]+ 完成签名方法=HmacSHA256

我在 cmd bash scipt 之后签署了这个请求查询

 #!/bin/bash

q='GET
ec2.amazonaws.com
/
AWSAccessKeyId=<aws acces_key>&Action=DescribeRegions&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2013-05-24T12%3A35%3A00Z&Version=2013-02-01'

echo -n "$q" | openssl dgst -sha256 -hmac "<aws secret key>" -binary | openssl enc -base64

输出为:xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0= 然后我将这个 curl 请求与上面的 bash 脚本分开给出。

$curl -v -get --data-encode DATA https://ec2.amazonaws.com/?Action=DescribeRegions&AWSAccessKeyId=<aws access key>&Version=2013-02-01&Timestamp=2013-05-24T12%3A35%3A00Z&SignatureVersion=2&SignatureMethod=HmacSHA256&Signature=xkw62EsVWEpc3rodXADy4Q3LOquKKfHmVHrrIIGQCg0=

任何 1 都可以告诉我我哪里出错了吗?

4

1 回答 1

0

您需要引用请求 URL。它包含您的 shell 正在解释的字符。

线索在输出行中,如"[1] Done ...". URL 中的 & 号导致 URL 的片段作为后台子 shell 执行。这些行是报告这些子shell 已完成的shell。

于 2013-05-24T11:41:56.360 回答