You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从仅可通过B访问的私有服务器A向Amazon S3传输文件?

解决从私有网络服务器A直接传输文件到Amazon S3的问题

我明白你遇到的困扰了——当你尝试指定具体文件名时,aws s3 cp 会误以为你要读取本地服务器B上的文件,而不是从管道接收来自服务器A的文件内容,所以才会抛出“The user-provided path file does not exist”的错误。下面给你几个可行的解决方案:

方案1:通过管道传输并指定S3目标文件名

如果你想保留直接传输的方式(文件不落地到服务器B),可以继续用管道配合进程替换,核心是让aws s3 cp从标准输入读取内容,同时显式指定S3上的目标文件名。命令格式如下:

scp -i key.pem user@serverA:/path/to/source_file | aws s3 cp - s3://your-bucket/path/target_file

这里的-是关键,它告诉aws s3 cp从标准输入读取数据,你只需要在S3路径后直接填写想要的文件名(比如target_file),就能把服务器A上的source_file准确传到S3的指定位置。

方案2:先同步到服务器B,再上传到S3

如果文件体积不大,或者需要在服务器B保留一份备份,可以分两步操作:

# 第一步:从服务器A复制文件到服务器B本地
scp -i key.pem user@serverA:/path/to/source_file /local/path/on/serverB/

# 第二步:从服务器B上传文件到S3
aws s3 cp /local/path/on/serverB/source_file s3://your-bucket/path/target_file

方案3:通过SSH直接读取服务器A文件内容并上传

另一种灵活的方式是用SSH命令直接在服务器A上读取文件内容,再通过管道传给aws s3 cp,效果和scp传输一致:

ssh -i key.pem user@serverA "cat /path/to/source_file" | aws s3 cp - s3://your-bucket/path/target_file

这条命令会通过SSH连接到服务器A,执行cat命令读取文件内容,然后将内容通过管道传给服务器B上的aws s3 cp,同样靠-让它从标准输入接收数据。

为什么原来的命令只在文件名是“-”时生效?

当你用scp ... >(aws s3 cp - s3://...)时,-作为aws s3 cp的源参数,代表从标准输入读取数据,而scp会把远程文件的内容输出到管道中,两者匹配就能正常工作。但如果你把-换成具体文件名,aws s3 cp会去服务器B的本地文件系统查找该文件,自然找不到,也就触发了报错。

内容的提问来源于stack exchange,提问作者AATHITH RAJENDRAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:32:54