
Ich möchte eine Datei von Amazon AWS S3 herunterladen (GET) und die Befehle in ein Shell-Skript schreiben.
Aber ich bekomme immer die Fehlermeldung:Die AWS-Authentifizierung erfordert einen gültigen Date- oder x-amz-date-Header. Ich bin sicher, dass mit meinen Schlüsseln alles in Ordnung ist.
Hier ist meine s3.sh vonhttps://stackoverflow.com/questions/27658147/download-private-file-from-s3-using-bash:
#!/bin/sh
s3key="xxxxxxxxxxxxxxxxxxxx"
s3skey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
file=/aaa.pdf
bucket=test
date=$(date +"%a, %d %b %Y %T %z")
echo $date
content_type='application/x-compressed-tar'
string="GET\n\n$content_type\n$date\n/$bucket$file"
signature=$(echo -en "${string}" | openssl sha1 -hmac "${s3skey}" -binary | base64)
curl -H "Host: $bucket.s3.amazonaws.com" \
-H "Date: $date" \
-H "x-amz-date: $date" \
-H "Content-Type: $content_type" \
-H "Authorization: AWS ${s3key}:$signature" \
https://$bucket.s3-ap-northeast-1.amazonaws.com$file
und es wird immer die Fehlermeldung angezeigt:
<Code>AccessDenied</Code><Message>AWS authentication requires a valid Date or x-amz-date header</Message>
hat jemand ideen? danke
Antwort1
Ihr Skript verwendet den folgenden Wert für das Datum
date=$(date +"%a, %d %b %Y %T %z")
Das Skript, auf das Sie verweisen, verwendet ein anderes Datumsformat. Da das andere Format einwandfrei funktioniert, ändern Sie Ihr Skript entsprechend.
dateValue="`date +'%a, %d %b %Y %H:%M:%S %z'`"