无法使用Shell脚本将文件上传到AWS S3

问题描述 投票:1回答:2

尝试上传到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}
shell amazon-s3 sh
2个回答
1
投票

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

通过aws configure命令配置AWS并输入密钥和区域

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

aws s3 cp fileName s3://bucketName

链接: http//docs.aws.amazon.com/cli/latest/userguide/installing.html#install-bundle-other-os

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


0
投票

请按照以下步骤操作,

创建一个有权在s3存储桶中上传文件的IAM用户。

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

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

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

使用以下命令

AWS配置

输入访问密钥输入秘密密钥输入区域,例如,如果它是mumbau区域,则使用ap-south-1输入输出作为“文本”

之后,您就可以将文件从服务器上传到s3存储桶了。

使用example命令在s3存储桶中上传文件

aws s3 cp或mv fileName s3:// bucketName

上面的aws cli可以在脚本中用于上传文件。

© www.soinside.com 2019 - 2024. All rights reserved.