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

如何从具备sudo与SSH权限的服务器向仅支持FTP的服务器传输大文件夹?

如何从具备sudo与SSH权限的服务器向仅支持FTP的服务器传输大文件夹?

首先先回答你的第一个问题:先把数据转到本地再通过FileZilla上传到FTP服务器是可行的,但算不上最优方案。如果你的本地机器有足够的存储空间(至少1T以上),而且上传/下载带宽都够用,这么做完全没问题;但缺点是要多走一遍本地中转,耗时会加倍,还会占用本地大量空间。如果能直接从SSH服务器把数据传到FTP服务器,会更高效。

接下来解决你遇到的核心问题:sudo权限下无法用scp/rsync直接读取服务器上的文件夹。我来逐个分析你试过的命令问题,再给出正确的解决方法:


1. 你的tar命令问题

你试的命令:

ssh user@server sudo -S tar -C /data/volume1 -cf . | tar -xf-

这里有两个关键错误:

  • tar -cf . 是把内容打包成名为.的文件,而不是输出到标准输出(stdout),正确的写法应该是 -cf -(用减号表示输出到stdout)
  • 远程的sudo tar命令需要用引号包裹,否则ssh只会执行sudo -S tar,后面的参数会被本地shell解析

正确的tar传输命令应该是:

ssh user@server "sudo tar -C /data/volume1 -cf - ." | tar -xf - -C /Volumes/C/MyData

如果需要输入sudo密码,可以加上-S并通过管道传入密码(注意明文密码不安全,仅在临时场景用):

echo "你的sudo密码" | ssh user@server "sudo -S tar -C /data/volume1 -cf - ." | tar -xf - -C /Volumes/C/MyData

或者去掉-S,执行命令后手动在终端输入sudo密码(更安全)。


2. 你的rsync命令问题

你试的命令:

rsync -avz --rsync-path="sudo rsync" user@server:/data/volume1/ /Volumes/C/MyData

这个命令理论上可行,但失败的原因大概率是sudo需要交互式输入密码,但rsync默认不会分配伪终端,导致密码输入提示无法显示。解决方法是给ssh加上-t参数,强制分配伪终端:

rsync -avz -e "ssh -t" user@server:/data/volume1/ /Volumes/C/MyData --rsync-path="sudo rsync"

执行这个命令后,终端会提示你输入远程服务器的sudo密码,输入后就能正常同步了。


3. 更优方案:直接从SSH服务器传到FTP服务器(无需本地中转)

既然你有SSH服务器的sudo权限,完全可以在远程服务器上直接把数据传到FTP服务器,省去本地中转的麻烦。这里推荐用lftp工具(如果远程服务器没安装,用sudo apt install lftp或sudo yum install lftp安装):

方法一:打包后直接上传

ssh user@server "sudo tar -C /data/volume1 -cf - . | lftp -u ftp用户名,ftp密码 ftp://FTP服务器IP -e 'put - -o big_folder.tar; quit'"

这个命令会在远程服务器把文件夹打包,然后通过lftp直接传到FTP服务器,保存为big_folder.tar,之后你可以在FTP服务器上解压(如果FTP服务器有解压权限的话)。

方法二:直接同步文件夹到FTP(如果FTP支持被动模式)

如果不想打包,可以用lftp的mirror功能:

ssh user@server "sudo lftp -u ftp用户名,ftp密码 ftp://FTP服务器IP -e 'mirror -R /data/volume1/ /远程FTP目标路径; quit'"

-R参数表示反向同步(本地到远程),这样可以直接把整个文件夹同步到FTP服务器,无需打包。


备注:内容来源于stack exchange,提问作者Nmgh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:08:04