Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用shell脚本将文件上载到aws s3_Shell_Amazon S3_Sh - Fatal编程技术网

无法使用shell脚本将文件上载到aws s3

无法使用shell脚本将文件上载到aws s3,shell,amazon-s3,sh,Shell,Amazon S3,Sh,我在尝试上载到s3时遇到以下错误。下面的脚本似乎是正确的,但我仍然得到上面的错误。请有人帮我解决这个错误。我的密钥和访问ID是正确的,因为我能够在java和ruby中使用这些密钥连接到AWS <?xml version="1.0" encoding="UTF-8"?> <Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated

我在尝试上载到s3时遇到以下错误。下面的脚本似乎是正确的,但我仍然得到上面的错误。请有人帮我解决这个错误。我的密钥和访问ID是正确的,因为我能够在java和ruby中使用这些密钥连接到AWS

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message><AWSAccessKeyId>AKIAJNODAIRHFUX3LHFQ</AWSAccessKeyId><StringToSign>PUT

application/x-compressed-tar
Sun, 20 Dec 2015 19:54:47 -0500
/test-pk-proj//home/rushi/pk.tar.gz</StringToSign><SignatureProvided>M1PcN+Umkq5WFtVVSerHRGNABb8=</SignatureProvided><StringToSignBytes>50 55 54 0a 0a 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 63 6f 6d 70 72 65 73 73 65 64 2d 74 61 72 0a 53 75 6e 2c 20 32 30 20 44 65 63 20 32 30 31 35 20 31 39 3a 35 34 3a 34 37 20 2d 30 35 30 30 0a 2f 74 65 73 74 2d 70 6b 2d 70 72 6f 6a 2f 2f 68 6f 6d 65 2f 72 75 73 68 69 2f 70 6b 2e 74 61 72 2e 67 7a</StringToSignBytes><RequestId>5439C7C84533E7C6</RequestId><HostId>620896ul+wnRwCjWl1ZtNZQ5NEJMGl29FqESC3iJyvnWhYhOECLlPl0417RfF3eovKFb7ac2.amazonaws.com port 443: Connection timed out
下面是我用来将数据上传到s3的shell脚本

file=/home/rushi/1.pdf
bucket=xxxxxxxxxxxxxxxxxxx
resource="/${bucket}/${file}"
contentType="application/x-compressed-tar"
dateValue=`date -R`
stringToSign="PUT\n\n${contentType}\n${dateValue}\n${resource}"
s3Key=xxxxxxxxxxxxxxxxxxxxxxxxxxx
s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -L -X PUT -T "${file}" \
  -H "Host: ${bucket}.s3-website-us-west-2.amazonaws.com" \
  -H "Date: ${dateValue}" \
  -H "Content-Type: ${contentType}" \
  -H "Authorization: AWS ${s3Key}:${signature}" \
  https://${bucket}.s3-website-us-west-2.amazonaws.com/${file}

从下面给出的链接安装AWS CLI

通过
AWS Configure
命令配置AWS,然后输入键和区域

要将文件复制到S3,请在shell脚本中使用此命令

aws s3 cp文件名s3://bucketName

链接:


p、 s如果收到连接超时错误,请在安全组中打开端口443(HTTPS)

请按照以下步骤操作

创建一个IAM用户,该用户有权在s3 bucket中上载文件

注意:您还可以创建一个策略,在该策略中,您可以访问您所在地区的所有可用s3存储桶,并且可以将该策略附加到您在IAM中创建的用于上载s3存储桶中文件的用户上

记下IAM用户的访问权限和密钥

登录到您的服务器,例如[Aws linux server]

使用以下命令

aws配置

输入访问密钥 输入密钥 输入地区,例如,如果是mumbau地区,请使用ap-south-1 将输出输入为“文本”

在此之后,您可以将文件从服务器上载到s3存储桶

使用示例命令上载s3 bucket中的文件

aws s3 cp或mv文件名s3://bucketName


上述aws cli可在脚本中用于上传文件。

您不可能希望bucket和key之间出现双重
/
,对吗?如果文件有一个前导斜杠,就像这里一样,那么
resource=“/${bucket}/${file}”
应该是
resource=“/${bucket}${file}”
,但不清楚这是你唯一的问题,还是其中一个问题。第二个问题,
https://${bucket}.s3-website-us-west-2.amazonaws.com/${file}
两次出错。同样,您要将前导斜杠加倍,主机名应该是
bucket.s3-us-west-2.amazonaws.com
——您不能直接将上传发送到web站点端点,该端点无论如何都不会说https——因此您的错误实际上与您显示的代码不对应。