Download private Datei aus S3 mit bash
Ich versuche, das folgende bash-Skript zu arbeiten (kopiert von 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}
Ich bin immer ein SignatureDoesNotMatch Fehler egal was ich mache.
Irgendwelche Ideen auf, wie man dieses Problem beheben wird sehr geschätzt.
- Ich weiß nicht, ob dies ist verwandt, aber Sie ließ einen Zeilenumbruch in das
stringToSign
Wert. - Ja, ich weiß, dass scheint zu sein, die von Ihnen gewünschten format. Habe ich auch getestet, ohne neue Linien, ohne Leerzeichen, etc. Bisher ohne Erfolg, aber danke.
- Sie versucht, mit den zusätzlichen Zeilenumbruch zwischen
GET
und der content-type auch? - Ja:
signingString="GET\n\n${contentType}\n${dateValue}\n${resource}"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachdem viel zu viel Zeit damit verbracht, auf diese habe ich es endlich auf Arbeit:
Diese Zeile:
fehlt ein 'e':
In anderen Worten, Zeichen nicht als entkommen, bevor die Zeichenfolge unterzeichnet wurde.
Als ein beiseite, ich habe auch gelernt, dass für get-Anforderungen, der Inhaltstyp ist bedeutungslos.
Mit verschiedenen Antworten in diesem thread, ich wandelte es in eine handliche
s3get
bash-Funktion:Getestet auf OSX und Ubuntu. Gespeichert in dieser Github-gist.
Den TS gebeten, für eine funktionierende SHA-1-version von das Skript. Allerdings, SHA-1, veraltet und Amazon-Rechenzentren, die nur akzeptieren, die SHA-256-Verschlüsselung, hiermit die download-Skript, die verwendet werden können für alle S3-Datencentern:
Es folgt auch HTTP-307-Weiterleitungen.
Getestet auf Ubuntu
Wenn jemand weiß eine Lösung zum entfernen des HMAC-ASCII-Schritt, du bist willkommen, um zu Antworten. Ich habe dies nur in dieser Weise.
date -u +'%Y%m%d'
" "date -u +'%Y%m%dT%H%M%SZ'
" dies behebt timzone Verwandte ThemenWar ich immer Fehler in der eigentlichen Antwort. Dies funktioniert für mich. Diese erhalten die Datei als das, was es ist und nicht als string.
Bedarf es einer kleinen Anpassung, aber die folgenden Zeilen gut funktioniert