gpt4 book ai didi

bash - 使用 bash 从 S3 下载私有(private)文件

转载 作者:行者123 更新时间:2023-11-29 08:49:05 25 4
gpt4 key购买 nike

我正在尝试让以下 bash 脚本工作(从 http://curl.haxx.se/mail/archive-2014-10/0006.html#replies 复制):

#!/bin/sh 
file=path/to/file
bucket=your-bucket
resource="/${bucket}/${file}"
contentType="application/x-compressed-tar"
dateValue="`date +'%a, %d %b %Y %H:%M:%S %z'`"
stringToSign="GET
${contentType}
${dateValue}
${resource}"
s3Key=xxxxxxxxxxxxxxxxxxxx
s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
signature=`/bin/echo -n "$stringToSign" | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -H "Host: ${bucket}.s3.amazonaws.com" \
-H "Date: ${dateValue}" \
-H "Content-Type: ${contentType}" \
-H "Authorization: AWS ${s3Key}:${signature}" \
https://${bucket}.s3.amazonaws.com/${file}

无论我做什么,我都会收到 SignatureDoesNotMatch 错误。

任何有关如何解决此问题的想法将不胜感激。

最佳答案

在这上面花了太多时间之后我终于让它工作了:

这一行:

signature=`/bin/echo -n "$stringToSign" | openssl sha1 -hmac ${s3Secret} -binary | base64`

缺少一个“e”:

signature=`/bin/echo -en "$stringToSign" | openssl sha1 -hmac ${s3Secret} -binary | base64`

换句话说,在字符串被签名之前,字符没有被转义。

顺便说一句,我还了解到对于get请求,内容类型是没有意义的。

关于bash - 使用 bash 从 S3 下载私有(private)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com