如何用单条命令从S3复制多个文件到本地且仅通过aws-vault认证一次
问题原因
你之前的管道写法存在两个核心问题:
- 管道的作用是将前一个命令的标准输出传递给后一个命令的标准输入,无法将
aws-vault生成的临时认证环境变量传递给第二个aws s3 cp命令 - 第二个
aws s3 cp没有运行在aws-vault exec的认证上下文中,相当于没有身份凭证直接调用AWS CLI,自然无法运行
解决方案1:少量文件直接内联多命令
让aws-vault启动一个子shell进程,所有S3复制命令都在这个子shell中执行,全程只需要一次身份认证:
aws-vault exec <ROLE> -- bash -c "aws s3 cp s3://path_to_file1 ~/file1 && aws s3 cp s3://path_to_file2 ~/file2"
- 命令间用
&&分隔时,只有前一条复制成功才会执行下一条;如果不需要做成功校验,直接用;分隔即可 - 加
--是为了避免后续命令的参数被aws-vault误解析,属于通用最佳实践
解决方案2:大量文件使用批量同步
如果需要复制的文件数量较多,可以先把所有需要复制的S3对象相对路径(相对于桶根目录)写入一个文本文件,例如s3_copy_list.txt,每行写一个路径,之后用s3 sync的--files-from参数批量拉取,同样只需要一次认证:
# s3_copy_list.txt 示例内容: # path_to_file1 # path_to_file2 # path_to_file3 aws-vault exec <ROLE> -- aws s3 sync s3://<你的桶名> ~/本地存储路径 --files-from s3_copy_list.txt
这个方案不需要逐行写复制命令,维护成本更低,适配无命名规律的文件拉取场景。
内容的提问来源于stack exchange,提问作者user1337
相关产品推荐
相关产品推荐

