-
-
Save drfill/c18308b6d71ee8032efda870b9be348e to your computer and use it in GitHub Desktop.
Amazon S3 download with Curl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 -en "$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} |
@dashxdr is right stringToSign
should be
stringToSign="GET\n\n${contentType}\n${dateValue}\n${resource}"
Thanks for the script and the helpful comments - worked like a charm! 👍
bucket path style.
use "/bin/echo" wrong in my shell.
#!/bin/bash
file=$1
dateValue=$(date -R -u +'%a, %d %b %Y %H:%M:%S %z')
stringToSign="GET\n\n\n${dateValue}\n${file}"
signature=$(echo -en "${stringToSign}" | openssl sha1 -hmac "${S3_SECRET_KEY}" -binary | base64)
curl "https://${S3_HOST}${file}" "${@:2}"
-X GET
-H "Host: ${S3_HOST}"
-H "Date: ${dateValue}"
-H "Authorization: AWS ${S3_ACCESS_KEY}:${signature}"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This doesn't work. You have spaces on the end of every line that need to be deleted. And you need a 2nd newline after line 7, after the GET.