Linux下无需任何SDK,一条shell命令搞定签名的上传和下载-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Linux下无需任何SDK,一条shell命令搞定签名的上传和下载

2015-03-18 21:11:36 25690 6
感谢这位大侠
tmont.com/blargh/2014/1/uploading-to-s3-in-bash
实现了shell的签名上传
在这个基础上我做了一个OSS的上传和下载的shell命令,有兴趣的可以自己尝试下。

使用的前提条件:
就是必须安装了openssl和base64,curl这几个bianry,如果没有的,请自行搜索下安装
假如将以下代码保存为oss.sh
并将host,bucket,Id和Key替换成相应的OSS Host,Bucket,Id和Key

上传:
sh oss.sh put localfile objectname

成功的结果类似:

HTTP/1.1 200 OK
Date: Wed, 18 Mar 2015 12:55:23 GMT
Content-Length: 0
Connection: close
ETag: "A797938C31D59EDD08D86188F6D5B872"
Server: AliyunOSS
x-oss-request-id: 550975BB9215222B22015250

下载
sh oss.sh get objectname localfile


#!/bin/sh
host=需要修改
bucket=需要修改
Id=需要修改
Key=需要修改


method=$1
source=$2
dest=$3
if test -z "$method"
then
    method=GET
fi


if [ "get" = ${method} ] || [ "GET" = ${method} ]
then
    method=GET
elif [ "put" = ${method} ] || [ "PUT" = ${method} ]
then
    method=PUT
else
    method=GET
fi
if test -z "$dest"
then
    dest=$source
fi


if test -z "$method" || test -z "$source" || test -z "$dest"
then
    echo $0 put localfile objectname
    echo $0 get objectname localfile
    exit -1
fi


if [ "put" = ${method} ] || [ "PUT" = ${method} ]
then
    resource="/${bucket}/${dest}"
    contentType=`file -ib ${source} |awk -F ";" '{print $1}'`
    dateValue="`TZ=GMT date +'%a, %d %b %Y %H:%M:%S GMT'`"
    stringToSign="${method}\n\n${contentType}\n${dateValue}\n${resource}"
    signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${Key} -binary | base64`
    url=http://${host}/${resource}
    echo "upload ${source} to ${url}"
    curl -i -q -X PUT -T "${source}" \
      -H "Host: ${host}" \
      -H "Date: ${dateValue}" \
      -H "Content-Type: ${contentType}" \
      -H "Authorization: OSS ${Id}:${signature}" \
      ${url}
else
    resource="/${bucket}/${source}"
    contentType=""
    dateValue="`TZ=GMT date +'%a, %d %b %Y %H:%M:%S GMT'`"
    stringToSign="${method}\n\n${contentType}\n${dateValue}\n${resource}"
    signature=`echo -en ${stringToSign} | openssl sha1 -hmac ${Key} -binary | base64`
    url=http://${host}/${resource}
    echo "download ${url} to ${dest}"
    curl --create-dirs \
      -H "Host: ${host}" \
      -H "Date: ${dateValue}" \
      -H "Content-Type: ${contentType}" \
      -H "Authorization: OSS ${Id}:${signature}" \
      ${url} -o ${dest}
fi

取消 提交回答
全部回答(6)
  • 游客yqsz3tcyf2xuc
    2020-04-17 15:29:05

    报错OSS authentication requires a valid Date.

    0 0
  • 34480464
    2020-02-25 14:51:17

    大神你好,通过shell写了一个更新dns @主机记录的脚本,提示签名失败,有时间帮忙看下吗

    0 0
  • boyang.liu
    2015-12-03 16:59:10
    ReLinux下无需任何SDK,一条shell命令搞定签名的上传和下载
    高手啊!必须学习一下
    0 0
  • rockuw
    2015-12-03 16:30:21
    ReLinux下无需任何SDK,一条shell命令搞定签名的上传和下载
    0 0
  • 中郁
    2015-12-03 16:24:40
    ReLinux下无需任何SDK,一条shell命令搞定签名的上传和下载
    神器啊
    0 0
  • ftp4oss
    2015-03-18 22:40:09
    高手!支持!
    0 0
滑动查看更多
相关问答

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226257浏览量 回答数 162

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 157771浏览量 回答数 145

111

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 295701浏览量 回答数 111

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646897浏览量 回答数 18

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259917浏览量 回答数 38

294

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 434658浏览量 回答数 294

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305718浏览量 回答数 249

40

回答

阿里云ecs从购买到环境搭建和建站!!(phpstudy一件包)

梦丫头 2014-07-29 20:51:49 162558浏览量 回答数 40

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 475907浏览量 回答数 24

2

回答

区域选择帮助

fanyue88888 2012-12-07 15:54:30 204435浏览量 回答数 2
+关注
3
文章
268
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载