首页 > 系统相关 >s3 upload files with shell script

s3 upload files with shell script

时间:2022-11-24 15:01:01浏览次数:64  
标签:files shell s3 content amz key date sha256

TL; DR

#!/usr/bin/env bash
# hangj.cnblogs.com


s3_key="Q3AM3UQ867SPQQA43P2F"
s3_secret="zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
session_token="Security-Token"

bucket="bucket-log"
tar_file="hello.log"


host="play.min.io"
region="cn-default"
service_name="s3"


method="PUT"
path="/${bucket}/${tar_file}"
query_string=""
content_type="application/octet-stream"
content_sha256="UNSIGNED-PAYLOAD"

amz_date=`date -u +%Y%m%dT%H%M%SZ`
signer_date=`echo ${amz_date} | cut -c1-8`
aws4_request="aws4_request"
scope="$signer_date/cn-default/s3/$aws4_request"

content_length=`wc -c $tar_file | awk '{print $1}'`
content_md5=`openssl dgst -md5 -binary $tar_file | base64`

date_key=`echo -en ${signer_date} | openssl dgst -sha256 -binary -hmac "AWS4${s3_secret}"`
date_region_key=`echo -en $region | openssl dgst -sha256 -binary -hmac "${date_key}"`
date_region_service_key=`echo -en $service_name | openssl dgst -sha256 -binary -hmac "${date_region_key}"`
signing_key=`echo -en $aws4_request | openssl dgst -sha256 -binary -hmac "${date_region_service_key}"`


headers="content-length:$content_length\ncontent-md5:$content_md5\ncontent-type:$content_type\nhost:$host\nx-amz-content-sha256:$content_sha256\nx-amz-date:$amz_date\nx-amz-security-token:$session_token"
signed_headers="content-length;content-md5;content-type;host;x-amz-content-sha256;x-amz-date;x-amz-security-token"
canonical_request="$method\n$path\n$query_string\n$headers\n\n$signed_headers\n$content_sha256"
canonical_request_hash=`echo -en "$canonical_request" |openssl sha256`
string_to_sign="AWS4-HMAC-SHA256\n$amz_date\n$scope\n$canonical_request_hash"

printf "string_to_sign: $string_to_sign"

signature=`echo -en "${string_to_sign}" | openssl dgst -sha256 -hmac "${signing_key}"`

echo
echo $signature


curl -v -X ${method} -T "${tar_file}" \
          -H "Host: $host" \
          -H "Accept-Encoding: identity" \
          -H "Content-Length: ${content_length}" \
          -H "Content-MD5: ${content_md5}" \
          -H "x-amz-content-sha256: ${content_sha256}" \
          -H "X-Amz-Security-Token: ${session_token}" \
          -H "x-amz-date: ${amz_date}" \
          -H "Content-Type: ${content_type}" \
          -H "Authorization: AWS4-HMAC-SHA256 Credential=${s3_key}/${scope}, SignedHeaders=$signed_headers, Signature=${signature}" \
          https://$host${path}

缘起

想给自己的 Android app 加一个上传日志的功能,找到了 Minio , 但是 Android Studio 上死活用不了

可是它不就是一个 PUT 请求嘛,只不过需要拼接一些参数,我用 okhttp 搞一下就行了。但是我对 java 不熟,所以写个 python 版 代码研究一下

region = "cn-default"
s3_key = "Q3AM3UQ867SPQQA43P2F"
s3_secret = "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
session_token = "Security-Token"

client = Minio(
    "play.min.io",
    access_key = s3_key,
    secret_key = s3_secret,
    session_token = session_token,
    # credentials = credentials,
    region = region,
    secure = True,

    # 这个是为了抓包,方便后面分析请求格式
    http_client = urllib3.ProxyManager(
        "http://localhost:8080/",
        cert_reqs = "CERT_REQUIRED",
        ca_certs = '/Users/hangj/.mitmproxy/mitmproxy-ca-cert.pem',
    ),
)

client.fput_object(
    "bucket-log", "hello.log", "/Users/hangj/dev/tmp/hello.log",
)

最终抓包结合 minio-py 的 signer.py 终于弄清楚协议细节, 手动拼接 curl 请求成功

接下来拼接 okhttp 也就不是什么问题了

参考链接

Upload to minio via curl
Amazon S3 REST API with curl

标签:files,shell,s3,content,amz,key,date,sha256
From: https://www.cnblogs.com/hangj/p/16921863.html

相关文章

  • [原创]shell创建文件或者文件夹快捷方式到桌面的脚本shell
    刚开始学shell编程写的#!/bin/bashvartest='我是变量,变量读取和gradle类似,用${}访问'echo变量长度${#vartest}echo"支持直接不输入引号echo,"#为毛直接显示了。'$e{,ee......
  • myos3 大学生利用C++构建一个完整的操作系统之代码重构并实现键盘打字和鼠标移动
    ​​myos1大学生利用C++构建一个完整的操作系统打印helloworld​​myos2大学生利用C++构建一个完整的操作系统之响应键盘中断myos3大学生利用C++构建一个完整的操作系统......
  • SS310L-ASEMI轴向低压降肖特基二极管SS310L
    编辑:llSS310L-ASEMI轴向低压降肖特基二极管SS310L型号:SS310L品牌:ASEMI封装:SMA正向电流:3A反向电压:100V引线数量:2芯片个数:1芯片尺寸:60MIL漏电流:10ua恢复时间:5ns......
  • SS310L-ASEMI轴向低压降肖特基二极管SS310L
    编辑:llSS310L-ASEMI轴向低压降肖特基二极管SS310L型号:SS310L品牌:ASEMI封装:SMA正向电流:3A反向电压:100V引线数量:2芯片个数:1芯片尺寸:60MIL漏电流:10ua恢复时间:5ns浪涌电流:50A芯......
  • ASW3642pin√pin替代TS3DV642无需更改电路
    TS3DV642是一种12通道1:2或2:1双向多路替代器/多路解复用器。TS3DV642接入2.6V至4.5V的电源供电,适用于电池供电。电阻(RON)最小和I/O电容较小,能够实现典型值高达7.5GHz的带宽......
  • 基于XQ6657Z35-EVM开发平台上TI TMS320C6657 TLV320AIC3206音频设计
    XQ6657Z35-EVM评估板是基于TI双核DSPTMS320C6657和XilinxZynqSoC处理器XC7Z035设计的多核异构平台,由核心板与底板架构组成。​SOM-XQ6657Z35核心板资源框图TMS320C6657......
  • Shell
    一、shell入门简介1.1什么是shellshell脚本简介什么是shell网上有很多shell的概念介绍,其实都很官方化,如果你对linux命令很熟悉,那么编写shell就不是一个难事,she......
  • 如何使用zx编写shell脚本
    前言在这篇文章中,我们将学习谷歌的zx库提供了什么,以及我们如何使用它来用Node.js编写shell脚本。然后,我们将学习如何通过构建一个命令行工具来使用zx的功能,帮助我们为新的......
  • 感染explorer.exe,使用映像劫持,ShellExecHook…的AV杀手GRHSGIH.EXE1
    感染explorer.exe,使用映像劫持,ShellExecHook…的AV杀手GRHSGIH.EXE1endurer原创2008-01-18第1版刚才一位朋友打电话来求助,说他电脑中了病毒,金山毒霸无法启动,无法复制/粘......
  • 掌握shell语言脚本
    一篇文章让你彻底掌握shell语言由于bash是Linux标准默认的shell解释器,可以说bash是shell编程的基础。本文主要介绍bash的语法,对于linux指令不做任何介......