使用命令行工具 ossutil 2.0 在多种操作系统中高效管理阿里云对象存储 OSS 资源,实现文件的快速上传、下载、同步和管理,适合开发者、运维人员和企业进行大规模数据迁移和日常运维操作。
|
操作系统 |
系统架构 |
下载地址 |
SHA256校验和 |
|
Linux |
x86_32 |
eb43dadbeeb101571364f95e08af366e7157ee491c20eb9ae9bda0670b579300 |
|
|
x86_64 |
d4308515689144c6b213d4998787abbd232dd6714fc43dedbe87064c2c34dee1 |
||
|
arm32 |
5e171ddb7e8a440fcb82f0abacf98fecfb8ed5014cf088e23bfa52751632d22a |
||
|
arm64 |
dcadb6aa97ddbae523e427e9397a529a04c2f21b4204065ce30e21d44908faa0 |
||
|
macOS |
x86_64 |
5a0e34e6c439eb0b0ba7b9a67958d5d3b031389437a952a0704520b5acb433d0 |
|
|
arm64 |
d3fafc4c961f7c58083f6b65a698a169992ba87177001f066ec8c2837a30e23e |
||
|
Windows |
x86_32 |
6b61dea288a294ef5c15b505b254f46fc58a94f8722a79da678fca009c224a84 |
|
|
x86_64 |
1c8b22eb5aaf0db6057dc6e0530695bf8f84c02226de15633d0b60427cc23d95 |
||
|
amd64 |
26e6e5d696da728774ba33bcc749e327f5883e9174735d6f83f3b4752ceb299b |
快速接入
接入命令行工具ossutil 2.0的流程如下:
安装ossutil
Linux
-
安装unzip解压工具。
Alibaba Cloud Linux
sudo yum install -y unzipCentOS
sudo yum install -y unzipUbuntu
sudo apt install -y unzip -
根据操作系统与架构选择对应安装包(Linux x86 32bit、Linux x86 64bit、Linux ARM 32bit、Linux ARM 64bit),也可通过 curl 下载。以下以在 Linux x86_64 上使用 curl 获取为例:
curl -o ossutil-2.2.2-linux-amd64.zip https://gosspublic.alicdn.com/ossutil/v2/2.2.2/ossutil-2.2.2-linux-amd64.zip -
在下载压缩包的所在目录执行以下解压命令。
unzip ossutil-2.2.2-linux-amd64.zip -
进入ossutil-2.2.2-linux-amd64目录。
cd ossutil-2.2.2-linux-amd64 -
在当前目录执行以下命令。
chmod 755 ossutil -
执行以下命令,实现ossutil的全局调用。
sudo mv ossutil /usr/local/bin/ && sudo ln -s /usr/local/bin/ossutil /usr/bin/ossutil -
验证是否成功安装ossutil,执行
ossutil命令。ossutil返回ossutil的帮助信息即表示安装成功。
Windows
-
安装ossutil。
-
根据操作系统与架构选择对应安装包(Windows x86 32bit、Windows x86 64bit、Windows 7, Windows 8, Windows Server 2008R2)。
-
将下载好的.zip压缩包解压到目标文件夹,然后进入解压后的目录。
-
复制当前解压后ossutil文件夹路径配置系统环境变量。
-
单击当前目录的路径栏,复制其中显示的当前文件夹路径。

-
打开环境变量对话框,在系统变量栏中找到并双击Path变量,单击新建按钮,然后将复制好的ossutil文件夹路径粘贴到新的条目框中。

-
-
验证是否成功安装ossutil,执行ossutil命令。
ossutil返回ossutil的帮助信息即表示安装成功。
-
macOS
-
根据操作系统与架构选择对应安装包(macOS x86 64bit、macOS ARM 64bit),也可通过 curl 下载。以下以在 macOS ARM64 位系统上使用 curl 获取为例:
curl -o ossutil-2.2.2-mac-arm64.zip https://gosspublic.alicdn.com/ossutil/v2/2.2.2/ossutil-2.2.2-mac-arm64.zip -
在下载压缩包的所在目录执行以下解压命令。
unzip ossutil-2.2.2-mac-arm64.zip -
进入ossutil-2.2.2-mac-arm64目录。
cd ossutil-2.2.2-mac-arm64 -
在当前目录执行以下命令。
chmod 755 ossutil -
执行以下命令,实现ossutil的全局调用。
sudo mv ossutil /usr/local/bin/ && sudo ln -s /usr/local/bin/ossutil /usr/bin/ossutil -
验证是否成功安装ossutil。
ossutil返回ossutil的帮助信息即表示安装成功。
配置ossutil
为避免因配置缺失导致操作失败,推荐使用 ossutil config 命令的配置向导快速完成 AccessKey ID、AccessKey Secret 和地域 ID 的配置。若还需管理高级配置,可参考配置指南进行手动配置访问凭证等。
以使用 RAM 用户的 AccessKey 配置为访问凭证为示例,结合配置向导快速完成配置。
Linux
-
输入配置命令。
ossutil config -
根据提示设置配置文件路径。可以直接回车使用默认的配置文件路径。
Please enter the config file name,the file name can include path(default /root/.ossutilconfig, carriage return will use the default file. If you specified this option to other file, you should specify --config-file option to the file when you use other commands):ossutil默认使用/root/.ossutilconfig作为配置文件。
-
根据提示分别设置AccessKey ID、AccessKey Secret、地域ID信息。
-
输入创建的AccessKey ID。
Please enter Access Key ID [****************id]:yourAccessKeyID -
输入创建的AccessKey Secret。
Please enter Access Key Secret [****************sk]:yourAccessKeySecret -
输入OSS的数据中心所在的地域,如无任何输入,默认值为cn-hangzhou。
Please enter Region [cn-hangzhou]:cn-hangzhou -
输入OSS的数据中心的Endpoint,如果不需要自定义 Endpoint,可以直接按回车跳过该参数的配置。
在上一步配置完地域信息后,将默认使用该地域 ID 对应的外网 Endpoint。例如,如果设置的
region-id为cn-hangzhou,默认使用的外网 Endpoint 是https://oss-cn-hangzhou.aliyuncs.com。如果需要自定义 OSS 数据中心所在地域的 Endpoint,请输入 Endpoint 信息。例如,如果希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint如
https://oss-cn-hangzhou-internal.aliyuncs.com。Please enter Endpoint (optional, use public endpoint by default) [None]: https://oss-cn-hangzhou-internal.aliyuncs.com
参数说明如下:
参数
是否必填
说明
accessKeyID
是
账号的AccessKey,AccessKey的获取方式参见创建AccessKey。
accessKeySecret
是
Region
是
Bucket所在的地域ID,本文以杭州地域为例,设置为cn-hangzhou,其他地域的ID参见地域和Endpoint。
endpoint
否
Bucket所在地域的Endpoint。若未手动设置Endpoint,Region将自动生成对应的外网endpoint,内网需显式指定。例如,本示例使用华东1(杭州)外网Endpoint,设置为
https://oss-cn-hangzhou.aliyuncs.com。如果希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint,设置为
https://oss-cn-hangzhou-internal.aliyuncs.com。关于各地域Endpoint的更多信息,请参见地域和Endpoint。
-
Windows
-
输入配置命令。
ossutil config -
根据提示设置配置文件路径。可以直接回车使用默认的配置文件路径。
Please enter the config file name,the file name can include path(default "C:\Users\issuser\.ossutilconfig", carriage return will use the default file. If you specified this option to other file, you should specify --config-file option to the file when you use other commands):ossutil默认使用C:\Users\issuser\.ossutilconfig作为配置文件。
-
根据提示分别设置AccessKey ID、AccessKey Secret、地域ID信息。
-
输入创建的AccessKey ID。
Please enter Access Key ID [****************id]:yourAccessKeyID -
输入创建的AccessKey Secret。
Please enter Access Key Secret [****************sk]:yourAccessKeySecret -
输入OSS的数据中心所在的地域,如无任何输入,默认值为cn-hangzhou。
Please enter Region [cn-hangzhou]:cn-hangzhou -
输入OSS的数据中心的Endpoint,如果不需要自定义 Endpoint,可以直接按回车跳过该参数的配置。
在上一步配置完地域信息后,将默认使用该地域 ID 对应的外网 Endpoint。例如,如果设置的
region-id为cn-hangzhou,默认使用的外网 Endpoint 是https://oss-cn-hangzhou.aliyuncs.com。如果需要自定义 OSS 数据中心所在地域的 Endpoint,请输入 Endpoint 信息。例如,如果希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint如
https://oss-cn-hangzhou-internal.aliyuncs.com。Please enter Endpoint (optional, use public endpoint by default) [None]: https://oss-cn-hangzhou-internal.aliyuncs.com
参数说明如下:
参数
是否必填
说明
accessKeyID
是
账号的AccessKey,AccessKey的获取方式参见创建AccessKey。
accessKeySecret
是
Region
是
Bucket所在的地域ID,本文以杭州地域为例,设置为cn-hangzhou,其他地域的ID参见地域和Endpoint。
endpoint
否
Bucket所在地域的Endpoint。若未手动设置Endpoint,Region将自动生成对应的外网endpoint,内网需显式指定。例如,本示例使用华东1(杭州)外网Endpoint,设置为
https://oss-cn-hangzhou.aliyuncs.com。如果希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint,设置为
https://oss-cn-hangzhou-internal.aliyuncs.com。关于各地域Endpoint的更多信息,请参见地域和Endpoint。
-
macOS
-
输入配置命令。
ossutil config -
根据提示设置配置文件路径。可以直接回车使用默认的配置文件路径。
Please enter the config file name,the file name can include path(default "/Users/user/.ossutilconfig", carriage return will use the default file. If you specified this option to other file, you should specify --config-file option to the file when you use other commands):ossutil默认使用/Users/user/.ossutilconfig作为配置文件。
-
根据提示分别设置AccessKey ID、AccessKey Secret、地域ID信息。
-
输入创建的AccessKey ID。
Please enter Access Key ID [****************id]:yourAccessKeyID -
输入创建的AccessKey Secret。
Please enter Access Key Secret [****************sk]:yourAccessKeySecret -
输入OSS的数据中心所在的地域,如无任何输入,默认值为cn-hangzhou。
Please enter Region [cn-hangzhou]:cn-hangzhou -
输入OSS的数据中心的Endpoint,如果不需要自定义 Endpoint,可以直接按回车跳过该参数的配置。
在上一步配置完地域信息后,将默认使用该地域 ID 对应的外网 Endpoint。例如,如果设置的
region-id为cn-hangzhou,默认使用的外网 Endpoint 是https://oss-cn-hangzhou.aliyuncs.com。如果需要自定义 OSS 数据中心所在地域的 Endpoint,请输入 Endpoint 信息。例如,如果希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint如
https://oss-cn-hangzhou-internal.aliyuncs.com。Please enter Endpoint (optional, use public endpoint by default) [None]: https://oss-cn-hangzhou-internal.aliyuncs.com
参数说明如下:
参数
是否必填
说明
accessKeyID
是
账号的AccessKey,AccessKey的获取方式参见创建AccessKey。
accessKeySecret
是
Region
是
Bucket所在的地域ID,本文以杭州地域为例,设置为cn-hangzhou,其他地域的ID参见地域和Endpoint。
endpoint
否
Bucket所在地域的Endpoint。若未手动设置Endpoint,Region将自动生成对应的外网endpoint,内网需显式指定。例如,本示例使用华东1(杭州)外网Endpoint,设置为
https://oss-cn-hangzhou.aliyuncs.com。如果希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint,设置为
https://oss-cn-hangzhou-internal.aliyuncs.com。关于各地域Endpoint的更多信息,请参见地域和Endpoint。
-
运行命令
-
创建Bucket。
ossutil mb oss://examplebucket以下输出结果表明已成功创建examplebucket。
0.668238(s) elapsed -
上传文件到Bucket。
-
创建本地文件
uploadFile.txt。echo 'Hello, OSS!' > uploadFile.txt -
上传文件到存储空间
examplebucket。ossutil cp uploadFile.txt oss://examplebucket以下输出结果表明文件已成功上传至
examplebucket。Success: Total 1 file, size 12 B, Upload done:(1 objects, 12 B), avg 44 B/s 0.271779(s) elapsed
-
-
下载文件。
将已上传的示例文件uploadFile.txt从examplebucket下载至本地localfolder文件夹下。
ossutil cp oss://examplebucket/uploadFile.txt localfolder/以下输出结果表明文件已成功下载至本地localfolder文件夹下。
Success: Total 1 object, size 12 B, Download done:(1 files, 12 B), avg 74 B/s 0.162447(s) elapsed -
列举examplebucket下的文件。
ossutil ls oss://examplebucket以下输出结果表明已成功列举examplebucket下的文件。
LastModifiedTime Size(B) StorageClass ETAG ObjectName 2024-11-26 14:35:29 +0800 CST 12 Standard 1103F650EB2C292D179A032D2A97B0F5 oss://examplebucket/uploadFile.txt Object Number is: 1 0.124679(s) elapsed -
删除examplebucket下的uploadFile.txt。
ossutil rm oss://examplebucket/uploadFile.txt以下输出结果表明已成功删除examplebucket下的uploadFile.txt。
0.295530(s) elapsed -
删除examplebucket。
ossutil rb oss://examplebucket以下输出结果表明已成功删除examplebucket。
0.478659(s) elapsed
配置指南
ossutil 支持通过配置文件、环境变量和命令行选项进行配置,灵活性高。
配置的优先级
ossutil 按以下顺序读取配置:
命令行选项 (如 -i, -k, -e) > 环境变量 (如 OSS_ACCESS_KEY_ID) > 配置文件 (~/.ossutilconfig)
从 2.2.0 版本开始,支持通过--ignore-env-var 命令行选项忽略 OSS_为前缀的环境变量配置。
配置文件
可以利用配置文件(默认路径为 ~/.ossutilconfig,或通过 -c 选项指定自定义路径)配置 ossutil。如果使用默认配置文件,则不需要额外指定配置文件路径。直接运行 ossutil 命令即可,例如:
ossutil ls oss://examplebucket
如果使用自定义配置文件路径,例如 /path/yourconfig,则需要通过 -c 选项指定配置文件路径。例如:
ossutil -c /path/yourconfig ls oss://examplebucket
配置文件格式
配置文件采用INI格式结构,以节(section)和键值(key)构成,配置参数保存在指定的节里。这些配置按照节分成多个段,可以通过--profile使用某一个节的配置。 默认情况下,ossutil使用配置文件中的[default]设置。要使用其他设置,可以创建和引用其他配置。
节和键值对
配置文件中的每个节由方括号 [ ] 包围的名称标识,节内的设置项采用 key=value 形式。例如:
[default]
accessKeyID = "your-access-key-id"
accessKeySecret = "your-access-key-secret"
-
节中的设置项采用
key=value形式。 -
节名和键值中的key不区分大小写。
-
配置参数的key支持多种格式,全小写、小驼峰、短划线(-)连接和下划线(_)连接,例如:accesskeyid、accessKeyId、access-key-id、access_key_id表示同一个参数名。
-
井号字符(#)开头的行表示注释行。
支持的节类型
|
节(Section)名称 |
说明 |
其它说明 |
|
[default] |
用于保存缺省设置,即当不设置--profile选项时,使用该节里的配置。 |
为[profile default]简化形式。 |
|
[profile name] |
用于配置参数,通过--profile name来引用。 |
支持通过source_profile方式引用其它配置。 |
|
[buckets name] |
针对具体bucket配置访问域名,包括region、 endpoint和addressing style。 |
支持内联写法。 |
可以使用config命令查看和设置配置内容。更多信息,请参见config(管理配置文件)。
节类型:profile
用于配置访问凭证和全局配置参数,支持的参数名如下:
-
访问凭证相关参数
参数名
别名
含义
mode
/
鉴权模式。
取值:AK、StsToken、RamRoleArn、EcsRamRole、Anonymous。
access-key-id
accessKeyId
access_key_id
访问OSS使用的AccessKey ID。
access-key-secret
accessKeySecret
access_key_secret
访问OSS使用的AccessKey Secret。
sts-token
stsToken
sts_token
访问OSS使用的STS Token。
role-arn
roleArn
role_arn
RAM角色的ARN,主要用于RamRoleArn模式。
role-session-name
roleSessionName
role_session_name
会话名字,主要用于RamRoleArn模式。
ecs-role-name
ecsRoleName
ecs_role_name
角色名,主要用于EcsRamRole模式。
credential-process
credentialProcess
credential_process
指定一个外部命令。
credential-uri
credentialUri
credential_uri
指定一个获取访问凭证的URI地址。
oidc-provider-arn
oidcProviderArn
oidc_provider_arn
指定OIDC提供者的ARN(Aliyun Resource Name),格式为
acs:ram::account-id:oidc-provider/provider-name。oidc-token-file-path
oidcTokenFilePath
oidc_token_file_path
指定OIDC令牌的文件路径,用于存储OIDC令牌。
credential-process-timeout
credentialProcessTimeout
credential_process_timeout
用于指定外部凭证请求的超时时间,单位为秒。默认值为15即指定15秒;最大值为600即指定10分钟;
credential-process-timeout = 60即指定60秒的超时时间。自 2.0.3 版本起支持。 -
全局参数
参数名
别名
含义
region
/
地域ID,必须设置。
loglevel
/
日志级别 。取值:
-
off(默认值)
-
info
-
debug
read-timeout
readTimeout
read_timeout
客户端读写请求超时时间。单位为秒,默认值20。
connect-timeout
connectTimeout
connect_timeout
客户端连接超时的时间。单位为秒,默认值10。
retry-times
retryTimes
retry_times
当错误发生时的重试次数。默认值10。
skip-verify-cert
skipVerifyCert
skip_verify_cert
不校验服务端的数字证书。
sign-version
signVersion
sign_version
请求使用的签名算法版本。取值:
-
v1
-
v4(默认值)
output-format
outputFormat
output_format
输出格式。取值:
-
raw(默认值)
-
json
-
xml
-
yaml
addressing-style
addressingStyle
addressing_style
请求地址的格式 。取值:
-
virtual(默认值)
-
path
-
cname
language
/
显示的语言。
endpoint
/
对外服务的访问域名,可不设置。
-
-
其它参数
参数名
别名
含义
source-profile
sourceProfile
source_profile
引用指定profile里的参数,例如:
[profile cred] access-key-id=ak access-key-secret=sk [profile dev] region=cn-hangzhou source-profile=credbuckets
/
引用指定buckets里的参数。
[profile dev] region=cn-hangzhou access-key-id=ak access-key-secret=sk buckets=dev-bucket [buckets dev-bucket] bucket-name-hz = endpoint=oss-cn-hangzhou-internal.aliyuncs.com bucket-name-bj = region=cn-beijingendpoint-suffix-list-path-style
/
指定自动使用 path-style 请求模式的 Endpoint 后缀列表,多个后缀以英文逗号(
,)分隔。自 2.2.0 版本起支持。示例1:
endpoint-suffix-list-path-style=DEFAULT示例2:
endpoint-suffix-list-path-style=DEFAULT,.path-style.comDEFAULT:表示内置的缺省列表,当前为 .privatelink.aliyuncs.com
节类型:buckets
用于配置特定Bucket和访问点的映射关系。支持嵌套写法,即buckets节按bucket-name = 行分成多个小节。格式如下:
[buckets name]
bucket-name =
key=value
其中,name为该buckets节的名字,bucket-name为具体的Bucket名字,key=value配置参数,支持的参数如下:
|
参数名 |
别名 |
含义 |
|
region |
/ |
数据中心所在的地域。 当不设置时,使用引入该参数的profile里的region值。 |
|
endpoint |
/ |
对外服务的访问域名,可不设置。 |
|
addressing-style |
addressingStyle addressing_style |
请求地址的格式。取值: virtual(默认值):使用Bucket虚拟域名请求地址格式。 path:使用path style请求地址格式。 cname:使用cname请求地址格式。 |
节类型buckets示例如下:
[buckets dev-bucket]
bucket-hz-01 =
region=cn-hangzhou
bucket-hz-02 =
region=cn-hangzhou
endpoint=test.com
addressing-style=cname
bucket-bj-01 =
region=cn-beijing
配置环境变量
可以参照以下步骤配置环境变量。
Linux系统
-
在命令行界面执行以下命令来将环境变量设置追加到
~/.bashrc文件中。echo "export OSS_ACCESS_KEY_ID='your-access-key-id'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='your-access-key-secret'" >> ~/.bashrc -
执行以下命令使变更生效。
source ~/.bashrc -
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS系统
-
在终端中执行以下命令,查看默认Shell类型。
echo $SHELL -
根据默认Shell类型进行操作。
Zsh
-
执行以下命令来将环境变量设置追加到
~/.zshrc文件中。echo "export OSS_ACCESS_KEY_ID='your-access-key-id'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='your-access-key-secret'" >> ~/.zshrc -
执行以下命令使变更生效。
source ~/.zshrc -
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
-
执行以下命令来将环境变量设置追加到
~/.bash_profile文件中。echo "export OSS_ACCESS_KEY_ID='your-access-key-id'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='your-access-key-secret'" >> ~/.bash_profile -
执行以下命令使变更生效。
source ~/.bash_profile -
执行以下命令检查环境变量是否生效。
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
-
Windows系统
-
在CMD中运行以下命令。
setx OSS_ACCESS_KEY_ID "your-access-key-id" setx OSS_ACCESS_KEY_SECRET "your-access-key-secret" -
打开一个新的CMD窗口。
-
在新的CMD窗口运行以下命令,检查环境变量是否生效。
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
当前支持配置的环境变量如下:
|
环境变量名 |
对应的参数名 |
|
OSS_ACCESS_KEY_ID |
access-key-id |
|
OSS_ACCESS_KEY_SECRET |
access-key-secret |
|
OSS_SESSION_TOKEN |
sts-token |
|
OSS_ROLE_ARN |
ram-role-arn |
|
OSS_ROLE_SESSION_NAME |
role-session-name |
|
OSS_REGION |
region |
|
OSS_ENDPOINT |
endpoint |
|
OSSUTIL_CONFIG_FILE |
config-file |
|
OSSUTIL_PROFILE |
profile |
配置命令行选项
ossutil提供了多个命令行选项,支持配置全局命令行选项。命令行选项的优先级最高,可以覆盖配置文件设置或环境变量设置的参数。
通过命令行选项需要传入访问密钥,可能会被日志系统记录,存在密钥泄露的风险,请谨慎使用。
ossutil ls oss://examplebucket -i "your-access-key-id" -k "your-access-key-secret" --region cn-hangzhou
访问凭证配置
使用 RAM 用户的 AK
如果应用程序部署运行在安全、稳定且不易受外部攻击的环境中,需要长期访问的OSS,且不能频繁轮转凭证时,可以使用阿里云主账号或RAM用户的AK(Access Key ID、Access Key Secret)初始化凭证提供者。需要注意的是,该方式需要手动维护一个AK,存在安全性风险和维护复杂度增加的风险。
配置文件
生成如下配置文件,并保存在~/.ossutilconfig。
[default]
accessKeyID = yourAccessKeyID
accessKeySecret = yourAccessKeySecret
region=cn-hangzhou
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -c ~/.ossutilconfig
环境变量
export OSS_ACCESS_KEY_ID=yourAccessKeyID
export OSS_ACCESS_KEY_SECRET=yourAccessKeySecret
ossutil ls oss://examplebucket
命令行选项
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -i yourAccessKeyID -k yourAccessKeySecret
使用STS临时访问凭证
如果应用程序需要临时访问OSS,可以使用通过STS服务获取的临时身份凭证(Access Key ID、Access Key Secret和Security Token)初始化凭证提供者。需要注意的是,该方式需要手动维护一个STS Token,存在安全性风险和维护复杂度增加的风险。此外,如果需要多次临时访问OSS,需要手动刷新STS Token。
配置文件
生成如下的配置文件,并保存在~/.ossutilconfig。
[default]
accessKeyID = yourSTSAccessKeyID
accessKeySecret = yourSTSAccessKeySecret
stsToken = yourSecurityToken
region=cn-hangzhou
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -c ~/.ossutilconfig
环境变量
export OSS_ACCESS_KEY_ID=yourSTSAccessKeyID
export OSS_ACCESS_KEY_SECRET=yourSTSAccessKeySecret
export OSS_SESSION_TOKEN=yourSecurityToken
ossutil ls oss://examplebucket
命令行选项
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -i yourSTSAccessKeyID -k yourSTSAccessKeySecret -t yourSecurityToken --region cn-hangzhou
使用RAMRoleARN
如果应用程序需要授权访问OSS,例如跨阿里云账号访问OSS,可以使用RAMRoleARN初始化凭证提供者。该方式底层实现是STS Token。通过指定RAM角色的ARN(Alibabacloud Resource Name),Credentials工具会前往STS服务获取STS Token,并在会话到期前调用AssumeRole接口申请新的STS Token。此外,还可以通过为policy赋值来限制RAM角色到一个更小的权限集合。
-
阿里云账号拥有资源的全部权限,AK一旦泄露,会给系统带来巨大风险,不建议使用。推荐使用最小化授权的RAM用户的AK。
-
如需创建RAM用户的AK,请直接访问创建AccessKey。RAM用户的Access Key ID、Access Key Secret信息仅在创建时显示,请及时保存,如若遗忘请考虑创建新的AK进行轮换。
-
如需获取RAMRoleARN,请直接访问创建角色。
生成如下配置文件,并保存在~/.ossutilconfig。不支持通过环境变量或者命令行选项方式设置。
[default]
accessKeyID = yourAccessKeyID
accessKeySecret = yourAccessKeySecret
mode = RamRoleArn
roleArn = acs:ram::137918634953****:role/Alice
roleSessionName = session_name_example
region=cn-hangzhou
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -c ~/.ossutilconfig
使用ECSRAMRole
如果应用程序运行在ECS实例、ECI实例、容器服务Kubernetes版的Worker节点中,建议使用ECSRAMRole初始化凭证提供者。该方式底层实现是STS Token。ECSRAMRole允许将一个角色关联到ECS实例、ECI实例或容器服务 Kubernetes 版的Worker节点,实现在实例内部自动刷新STS Token。该方式无需提供一个AK或STS Token,消除了手动维护AK或STS Token的风险。如何获取ECSRAMRole,请参见创建角色。
不支持通过环境变量方式设置。
EcsRamRole模式
配置文件
生成如下配置文件,并保存在~/.ossutilconfig。
[default]
mode = EcsRamRole
# ecsRoleName可以不设置,当不设置时,自动获取。
ecsRoleName = EcsRamRoleOss
region=cn-hangzhou
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -c ~/.ossutilconfig
命令行工具
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket --mode EcsRamRole
EcsRamRole IMDSv2模式
从 2.2.0 版本开始,支持 EcsRamRole IMDSv2 模式。
配置文件
生成如下配置文件,并保存在~/.ossutilconfig。
[default]
mode = Ali-EcsRamRole
# ecsRoleName可以不设置,当不设置时,自动获取。
ecsRoleName = EcsRamRoleOss
region=cn-hangzhou
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -c ~/.ossutilconfig
命令行工具
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket --mode Ali-EcsRamRole
使用OIDCRoleARN
在容器服务Kubernetes版中设置了Worker节点RAM角色后,对应节点内的Pod中的应用也就可以像ECS上部署的应用一样,通过元数据服务(Meta Data Server)获取关联角色的STS Token。但如果容器集群上部署的是不可信的应用(比如部署的客户提交的应用,代码也没有对开放),可能并不希望它们能通过元数据服务获取Worker节点关联实例RAM角色的STS Token。为了避免影响云上资源的安全,同时又能让这些不可信的应用安全地获取所需的STS Token,实现应用级别的权限最小化,可以使用RRSA(RAM Roles for Service Account)功能。该方式底层实现是STS Token。阿里云容器集群会为不同的应用Pod创建和挂载相应的服务账户OIDC Token文件,并将相关配置信息注入到环境变量中,Credentials工具通过获取环境变量的配置信息,调用STS服务的AssumeRoleWithOIDC接口换取绑定角色的STS Token。该方式无需提供一个AK或STS Token,消除了手动维护AK或STS Token的风险。详情请参见通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离。
生成如下的配置文件,并保存在~/.ossutilconfig。不支持通过环境变量或者命令行选项方式设置。
[default]
mode = oidcRoleArn
#指定 OIDC 提供者的 ARN(Aliyun Resource Name),格式为 acs:ram::account-id:oidc-provider/provider-name。
OIDCProviderArn=acs:ram::113511544585****:oidc-provider/TestOidcProvider
#指定 OIDC 令牌的文件路径,用于存储 OIDC 令牌
OIDCTokenFilePath=OIDCTokenFilePath
#填写角色的ARN信息,即需要扮演的角色ID。格式为acs:ram::113511544585****:oidc-provider/TestOidcProvider
roleArn=acs:ram::113511544585****:role/testoidc
# 自定义角色会话名称,用于区分不同的令牌。
roleSessionName= TestOidcAssumedRoleSession
region=cn-hangzhou
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -c ~/.ossutilconfig
外部进程获取凭证
ossutil通过外部命令启动一个进程,该进程与ossutil进程是独立的,称为外部进程。外部进程执行后,通过标准输出把结果返回给进程的启动者,即ossutil。可以通过外部进程获取凭证。
-
生成凭证的命令不可由未经批准的进程或用户访问,否则可能存在安全风险。
-
生成凭证的命令不会把任何秘密信息写入stderr或stdout,因为该信息可能会被捕获或记录,可能会将其向未经授权的用户公开。
外部命令返回的凭证,支持长期凭证和临时凭证,格式如下。
长期凭证
{
"AccessKeyId" : "ak",
"AccessKeySecret" : "sk"
}
临时凭证
{
"AccessKeyId" : "ak",
"AccessKeySecret" : "sk",
"Expiration" : "2023-12-29T07:45:02Z",
"SecurityToken" : "token"
}
生成如下配置文件,并保存在~/.ossutilconfig。不支持通过环境变量或者命令行选项方式设置。
[default]
mode = Process
credentialProcess = user-cmd
region=cn-hangzhou
通过如下命令查询examplebucket中的对象。
ossutil ls oss://examplebucket -c ~/.ossutilconfig
匿名访问
如果只需要访问公共读取权限的OSS资源,可以使用匿名访问方式,无需提供任何凭证。
ossutil cat oss://bucket/public-object --mode Anonymous
命令参考
ossutil提供了高级命令、API级命令、辅助命令等三类命令。
命令结构
ossutil常用命令格式如下:
ossutil command [argument] [flags]
ossutil command subcommond [argument] [flags]
ossutil topic
-
argument:参数,为字符串。
-
flags:选项,支持短名字风格
-o[=value]/ -o [ value]和长名字风格--options[=value]/--options[ value]。如果多次指定某个排它参数,则仅最后一个值生效。
命令示例如下:
-
命令:
ossutil cat oss://bucket/object -
多级命令:
ossutil api get-bucket-cors --bucket bucketexample -
帮助主题:
ossutil filter
命令列表
ossutil 提供了三类命令:
-
高级命令
用于常用的存储空间或者对象的操作场景,例如存储空间创建、删除、数据拷贝、对象属性修改等。
命令名
含义
创建存储空间
删除存储空间
获取存储或者指定前缀所占的存储空间大小
显示存储空间或者对象的描述信息
创建一个名字有后缀字符
/的对象将内容上传到追加类型的对象末尾
将对象内容连接到标准输出
列举存储空间或者对象
上传、下载或拷贝对象
删除存储空间里的对象
设置对象的属性
生成对象的预签名URL
恢复冷冻状态的对象为可读状态
将对象恢复成指定的版本
将本地文件目录或者对象从源端同步到目的端
计算文件/对象的哈希值
-
API级命令,提供了API操作的直接访问,支持该接口的配置参数。
说明仅列举部分命令,可以通过
ossutil api -h查看所有命令。命令名
含义
设置、修改Bucket的访问权限
获取访问权限
....
设置跨域资源共享规则
获取跨域资源共享规则
删除跨域资源共享规则
-
辅助命令,例如配置文件的配置、额外的帮助主题等。
命令名
含义
获取帮助信息
创建配置文件用以存储配置项和访问凭证
版本更新
显示版本信息
探测命令
命令选项类型
|
选项类型 |
选项 |
说明 |
|
字符串 |
--option string |
例如:--acl private。 |
|
布尔值 |
--option |
打开或关闭某一选项。 例如:--dry-run。 |
|
整数 |
--option Int |
无符号整数。 例如:--read-timeout 10。 |
|
时间戳 |
--option Time |
ISO 8601格式,即DateTime或Date。 例如:--max-mtime 2006-01-02T15:04:05。 |
|
字节单位后缀 |
--option SizeSuffix |
默认单位是字节(B),也可以使用单位后缀形式,支持的单位后缀为:K(KiB)=1024字节、M(MiB)、G(GiB)、G(GiB)、T(TiB)、P(PiB)、E(EiB) 例如:最小size为1024字节 --min-size 1024 --min-size 1K |
|
时间单位后缀 |
--option Duration |
时间单位,默认单位是秒。支持的单位后缀为:ms 毫秒,s 秒,m 分钟,h 小时,d 天,w 星期,M 月,y 年。 支持小数。例如:1.5天 --min-age 1.5d |
|
字符串列表 |
--option strings |
支持单个或者多个同名选项,支持以逗号(,)分隔的多个值。 支持多选项输入的单值。 例如:--metadata user=jack,email=ja**@test.com --metadata address=china |
|
字符串数组 |
--option stringArray |
支持单个或者多个同名选项,只支持多选项输入的单值。 例如 :--include *.jpg --include *.txt。 |
从非命令行中加载数据
一般情况下,参数的值都放在命令行里,当参数值比较复杂时,需要从文件加载参数值;当需要串联多个命令操作时,需要标准输中加载参数值。所以,对需要支持多种加载参数值的参数,做了如下约定:
-
以
file://开始的,表示从文件路径中加载。 -
当参数值为
-时,表示从标准输入中加载。
例如, 设置存储空间的跨域设置,以JSON参数格式为例,通过文件方式加载跨域参数。cors-configuration.json文件如下:
{
"CORSRule": {
"AllowedOrigin": ["www.aliyun.com"],
"AllowedMethod": ["PUT","GET"],
"MaxAgeSeconds": 10000
}
}ossutil api put-bucket-cors --bucket examplebucket --cors-configuration file://cors-configuration.json
通过选项参数值加载跨域参数,cors-configuration.json的紧凑形式如下:
{"CORSRule":{"AllowedOrigin":["www.aliyun.com"],"AllowedMethod":["PUT","GET"],"MaxAgeSeconds":10000}}ossutil api put-bucket-cors --bucket examplebucket --cors-configuration "{\"CORSRule\":{\"AllowedOrigin\":[\"www.aliyun.com\"],\"AllowedMethod\":[\"PUT\",\"GET\"],\"MaxAgeSeconds\":10000}}"
从标准输入加载参数的示例如下:
cat cors-configuration.json | ossutil api put-bucket-cors --bucket examplebucket --cors-configuration -
控制命令输出
输出格式
对ossutil api下的子命令,以及du、stat命令,支持通过--output-format参数调整其输出格式,当前支持的格式如下:
|
格式名称 |
说明 |
|
raw |
以原始方式输出,即服务端返回什么内容,则输出什么内容。 |
|
json |
输出采用JSON字符串的格式。 |
|
yaml |
输出采用YAML字符串的格式。 |
|
xml |
输出采用XML字符串的格式。 |
例如:以get-bucket-cors为例,原始内容如下:
ossutil api get-bucket-cors --bucket bucketexample
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>www.aliyun.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>10000</MaxAgeSeconds>
</CORSRule>
<ResponseVary>false</ResponseVary>
</CORSConfiguration>
转成JSON如下:
ossutil api get-bucket-cors --bucket bucketexample --output-format json
{
"CORSRule": {
"AllowedMethod": [
"PUT",
"GET"
],
"AllowedOrigin": "www.aliyun.com",
"MaxAgeSeconds": "10000"
},
"ResponseVary": "false"
}
筛选输出
ossutil提供了基于JSON的内置客户端筛选功能,通过--output-query value选项使用。
该选项仅支持ossutil api下的子命令。
该功能基于JMESPath语法,当使用该功能时,会把返回的内容转成JSON,然后再使用JMESPath进行筛查,最后按照指定的输出格式输出。有关JMESPath 语法的说明,请参见JMESPath Specification。
例如:以get-bucket-cors为例,只输出AllowedMethod内容,示例如下:
ossutil api get-bucket-cors --bucket bucketexample --output-query CORSRule.AllowedMethod --output-format json
[
"PUT",
"GET"
]
友好显示
对于高级命令(du、stat),提供了--human-readable选项,对字节、数量数据,提供了以人类可读方式输出信息。即字节数据转成Ki|Mi|Gi|Ti|Pi后缀格式(1024 base),数量数据转成k|m|g|t|p后缀格式(1000 base)。
例如:原始模式
ossutil stat oss://bucketexample
ACL : private
AccessMonitor : Disabled
ArchiveObjectCount : 2
ArchiveRealStorage : 10
ArchiveStorage : 131072
...
StandardObjectCount : 119212
StandardStorage : 66756852803
Storage : 66756852813
StorageClass : Standard
TransferAcceleration : Disabled
友好模式
ossutil stat oss://bucketexample --human-readable
ACL : private
AccessMonitor : Disabled
ArchiveObjectCount : 2
ArchiveRealStorage : 10
ArchiveStorage : 131.072k
...
StandardObjectCount : 119.212k
StandardStorage : 66.757G
Storage : 66.757G
StorageClass : Standard
TransferAcceleration : Disabled
命令返回码
通过进程等方式调用ossutil时,无法实时查看回显信息。ossutil支持在进程运行结束后,根据不同的运行结果生成不同的返回码,具体的返回码及其含如下。可以通过以下方式获取最近一次运行结果的返回码,然后根据返回码分析并处理问题。
Linux
执行命令获取返回码:echo $?。
Windows
执行命令获取返回码:echo %errorlevel%。
macOS
执行命令获取返回码:echo $?。
|
返回码 |
含义 |
|
0 |
命令操作成功,发送到服务端的请求执行正常,服务端返回200响应。 |
|
1 |
参数错误,例如缺少必需的子命令或参数,或使用了未知的命令或参数。 |
|
2 |
该命令已成功解析,并已对指定服务发出了请求,但该服务返回了错误(非2xx响应)。 |
|
3 |
调用OSS GO SDK时,遇到的非服务端错误。 |
|
4 |
批量操作时,例如cp、rm部分请求发生了错误。 |
|
5 |
中断错误。命令执行过程中,通过ctrl +c取消某个命令。 |
命令行选项
在命令行操作中,部分命令需要附加参数以指定操作对象或设置选项,而其他命令则不需要参数。对于带参数的命令,可以根据具体要求提供适当的参数值,以实现预期功能,例如,带参数的命令如:
ossutil ls --profile dev
ossutil ls --profile dev允许用户通过参数值dev指定特定的配置文件。带参数的选项通常需要通过空格或等号(=)将选项名称与参数值分隔,例如--profile dev或--profile=dev。当参数值包含空格时,必须使用双引号将整个参数值括起来,以确保命令正确解析,例如 --description "OSS bucket list"。
全局命令行选项
|
参数 |
类型 |
说明 |
|
-i, --access-key-id |
string |
访问OSS使用的AccessKey ID。 |
|
-k, --access-key-secret |
string |
访问OSS使用的AccessKey Secret。 |
|
--addressing-style |
string |
请求地址的格式。取值范围如下:
|
|
-c, --config-file |
string |
配置文件的路径。 默认值为 |
|
--connect-timeout |
int |
客户端连接超时的时间。单位为秒,默认值为10。 |
|
-n, --dry-run |
/ |
在不进行任何更改的情况下执行试运行。 |
|
-e, --endpoint |
string |
对外服务的访问域名。 |
|
-h, --help |
/ |
显示帮助信息。 |
|
--language |
string |
显示的语言。 |
|
--loglevel |
string |
日志级别。取值范围如下:
|
|
--mode |
string |
鉴权模式。取值:
|
|
--output-format |
string |
输出格式,默认值为raw。 |
|
--output-query |
string |
JMESPath查询条件。 |
|
--profile |
string |
指定配置文件里的profile。 |
|
-q, --quiet |
/ |
安静模式,打印尽可能少的信息。 |
|
--read-timeout |
int |
客户端读写请求超时时间。单位为秒,默认值为20。 |
|
--region |
string |
数据中心所在的地域,配置值可设置为cn-hangzhou。 |
|
--retry-times |
int |
当错误发生时的重试次数。默认值为10。 |
|
--sign-version |
string |
请求使用的签名算法版本。取值:
|
|
--skip-verify-cert |
/ |
表示不校验服务端的数字证书。 |
|
-t, --sts-token |
string |
访问OSS使用的STS Token。 |
|
--proxy |
string |
指定代理服务器。自 2.0.1 版本起支持。 配置值可以为以下几种:
|
|
--log-file |
string |
指定日志输出文件,自 2.0.1 版本起支持。配置值为:
如果未指定日志输出文件,输出到默认配置文件上。 |
|
--cloudbox-id |
string |
云盒ID,应用于云盒场景。自 2.1.0 版本起支持。 |
|
--ignore-env-var |
/ |
忽略所有以 |
|
--bind-address |
string |
指定出站连接所绑定的本地 IP 地址(支持 IPv4、IPv6)。自2.2.0 版本起支持。 |
|
--account-id |
string |
账号ID,用于向量 Bucket 场景中的身份识别与资源归属判断。自 2.2.0 版本起支持。 |
|
--user-agent |
string |
在默认的 User-Agent 末尾追加指定的值。自 2.2.2 版本起支持。 |
常用命令行选项
|
命令范围 |
支持的选项 |
|
所有高级命令 |
|
|
支持批量操作的命令 |
|
|
支持目的过滤规则的命令 |
|
|
支持单个对象的命令 |
--version-id string:对象的版本标识。 |
|
支持列表模式的命令 |
--list-format:列表文件的格式,取值:plain、inventory。 --list-manifest-from:从文件中读取列表文件格式的描述信息,当列表文件格式为inventory时,需要设置该参数。 |
常见问题
使用ossutil执行相关命令时,报错region must be set in sign version 4
问题原因:在配置ossutil2.0时没有配置地域ID项。
解决方法:为避免在使用ossutil时因配置项缺失导致操作失败,请确保按照以下步骤配置必要的基础项:AccessKey ID、AccessKey Secret、地域ID。特别是地域ID,由于签名已升级到V4版本,因此成为必需项。关于如何获取地域ID,请参见地域和Endpoint。



