服务器互传文件,最可靠的方案是使用rsync结合SSH密钥认证,根据文件大小和网络条件选择scp或sftp,并通过多线程工具或内网加速来提升效率,无需额外付费即可实现稳定传输。参考2
接手多台服务器后,传文件成了日常操作,用U盘拷?不现实,用FTP?配置麻烦且不安全,要的是命令行几下搞定,或者脚本自动化,下面从实战角度,拆解不同场景下的最佳做法。参考2
服务器之间传输文件最快的方法是什么
速度取决于网络带宽、延迟和工具本身的效率,内网传输通常能跑满带宽,而跨公网传输则受限于上行带宽和延迟,最快的方法不是单一工具,而是组合策略。
短距离内网优先用scp
同机房或同网段服务器,延迟低、丢包少,scp是最直接的选择,它基于SSH,无需额外配置,一条命令传完就结束。
- 典型命令:
scp /local/file user@目标IP:/目标路径/ - 适用场景:单次传输,文件大小<10GB,或临时操作。
- 速度表现:内网千兆环境下,速度可达100-120MB/s,接近磁盘读写极限。
大文件或断点续传用rsync
rsync不仅传输,还能同步,它比对源和目标差异,只传变化部分,且支持断点续传,对于几十GB的数据库备份或日志文件,rsync是首选。
- 关键特性:
-P参数保留进度,-z启用压缩,--bwlimit限制带宽避免占满。 - 典型命令:
rsync -avzP -e ssh /local/dir user@目标IP:/目标/dir/ - 速度优势:初次传输与scp相当,但后续增量传输快得多,多数情况下节省50%以上时间。
跨公网用多线程工具加速
公网传输受限于单线程TCP窗口,scp或rsync往往跑不满带宽,需要并行传输来提升效率。
- mrsync:rsync的并行变体,将文件切分多线程传输,据行业共识,在100Mbps公网下,速度可提升2-3倍。
- pscp:PuTTY套件中的并行scp,适合Windows向Linux传文件,注意,它依赖SSH,但多线程机制让速度翻倍。
- 配置示例:
pscp -pw "密码" -l 用户 -P 端口 -r 本地目录 目标IP:/目标路径/须先安装pscp,且密码明文存在安全问题,建议用密钥。
何时该考虑rsync而非scp
- 传输中断后不想重来:rsync配合
--partial可续传,scp中断后必须重传。 - 需要精确同步权限、时间戳:rsync有
-a归档模式,scp不保留全部属性。 - 传输大量小文件:rsync的压缩和增量优势明显,scp逐个建立SSH连接,慢得多。
两台Linux服务器如何互传文件
从零开始,假设你只有两台服务器的IP和root权限,下面的步骤覆盖密钥配置、常见传法、权限处理。
第一步:配置SSH密钥,免密码登录
每次都输密码不仅慢,而且脚本调用时无法交互,密钥对是最佳实践。
- 在源服务器生成密钥对:
ssh-keygen -t rsa -b 4096,一路回车。 - 将公钥复制到目标服务器:
ssh-copy-id user@目标IP,输入一次密码即可。 - 验证:
ssh user@目标IP,无需密码直接登录。
密钥配置后,后续scp、rsync、sftp都自动免密,脚本执行也畅通。
第二步:根据文件类型选命令
- 单个文件传输:用scp最简单。
scp -P 端口号 文件 user@目标IP:/目标路径/,注意-P是大写,指定端口。 - 目录传输:scp加
-r递归,但会丢失链接文件等属性,推荐用rsync:rsync -avz -e "ssh -p 端口号" /本地目录 user@目标IP:/目标目录/。 - 大文件传输:rsync加
--progress显示进度,或使用nc(netcat)配合管道来绕过加密开销,但安全性降低,仅限内网信任环境。
第三步:处理权限和用户问题
传输后文件权限可能错乱,scp默认保留源文件权限,但涉及不同用户时,可能无法写入,解决方案:
- 传输前先确认目标目录权限:
ls -ld /目标目录,确保源用户有写权限。 - 使用rsync时,加
--chown=USER:GROUP强制指定目标所有者,如--chown=root:root。 - 如果是普通用户传文件到系统目录,需要sudo权限,可先传到临时目录,再sudo mv。
第四个技巧:用rsync的远程shell参数
遇到非标准SSH端口,rsync命令写为rsync -e "ssh -p 2222",省去每次指定端口,同样适用于scp的
-P。
跨平台服务器互传文件方案对比
Windows和Linux混用是常见场景,不同操作系统有各自的协议和工具,需要选对组合。参考2
| 源平台 | 目标平台 | 推荐工具 | 优点 | 缺点 |
|---|---|---|---|---|
| Linux | Linux | rsync/scp | 原生支持,高效 | 需学习命令行 |
| Windows | Linux | WinSCP (SFTP) | 图形界面,拖拽操作 | 不适合脚本自动化 |
| Linux | Windows | 开启Windows SSH服务,用rsync | 统一管理 | 配置稍复杂 |
| Windows | Windows | 共享文件夹 + Robocopy | 内网速度快 | 需配置防火墙 |
图形化工具适合初次上手
对于不熟悉命令行的运维,WinSCP、FileZilla等SFTP客户端够用,它们支持断点续传、目录同步,且能保存多个会话,但需注意,图形化工具通常单线程,大文件传输速度不如命令行。
脚本自动化时用PowerShell或WSL
Windows Server 2019以后支持OpenSSH,可直接在PowerShell中运行scp或rsync,如果装了WSL,Linux工具链完整可用,跨平台传文件与Linux间无异,例如在WSL中输入rsync -avz /mnt/c/data/ user@LinuxIP:/data/,即可将Windows本地文件传到Linux。
价格因素:零成本 vs 商业方案
上述工具全部免费,无需额外购买,商业方案如IBM Aspera、Signiant等,能利用UDP协议在公网达到极速,但年费不菲,且配置复杂,对于大多数国内中小企业,rsync+多线程优化已足够,没必要花冤枉钱,如果需要跨地域传输,可以考虑租用内网专线,但成本较高,适合对速度要求极致的场景。
服务器互传文件速度优化与安全加固
传输快不只是选工具,还要调参数和保障安全。
优化网络层面
- 使用内网IP:如果服务器在同一内网,务必用私有IP传输,避免走公网出口,有些云厂商内网流量免费,公网流量则按量计费,据统计,内网传输速度至少是公网的5-10倍。
- 调整TCP参数:对于大文件,增大TCP窗口和缓冲区能提升吞吐,修改
,添加/etc/sysctl.conf
net.core.rmem_max=16777216和net.core.wmem_max=16777216,然后sysctl -p。 - 压缩传输:rsync加
-z,在CPU不是瓶颈时,压缩可减少传输量,但注意,已经压缩过的文件(如zip、jpg)再压缩效果不大,反而浪费CPU。
安全加固
- 禁用密码登录:密钥比密码安全得多,且方便,配置
/etc/ssh/sshd_config中PasswordAuthentication no,然后重启sshd。 - 限制IP白名单:通过防火墙只允许特定源IP访问SSH端口,减少攻击面。
- 使用SFTP代替FTP:FTP明文传输密码和数据,而SFTP基于SSH,加密传输,且无需额外搭建服务,多数Linux发行版自带sshd,SFTP直接可用。
遇到速度慢时排查
- 检查带宽:用
iperf3测两端之间的最大带宽,确定瓶颈在链路还是工具。 - 检查磁盘IO:
iotop或iostat看磁盘是否满负荷,磁盘慢会拖累传输。 - 检查CPU:rsync压缩时CPU负载高,若CPU瓶颈,可去掉
-z或改用--compress-level=1降低压缩级别。
服务器互传文件常见问题解答
Q: 跨机房服务器互传文件时,如何避免中断重传?
A: 使用rsync的--partial或--append选项,传输中断后再次运行相同命令会继续传输已传部分,而非从头开始,对于超大文件,建议分卷压缩后逐个传输,减小单文件体积,降低中断风险。
Q: 传输大文件时,带宽占用过高影响业务怎么办?
A: rsync的--bwlimit=RATE参数可限制带宽,单位KB/s,例如--bwlimit=10000限制为10MB/s,确保业务流量优先,建议在业务低峰期安排传输,或使用内置的nice命令降低进程优先级。
Q: 国外服务器传输文件到国内服务器,速度极慢如何处理?
A: 首先检查是否被墙或限速,使用CN2线路或国际BGP优化,使用多线程工具如axel(支持断点续传的下载工具)配合HTTP/FTP,或者用bbcp这类并行传输工具,如果文件可公开,先用国内中转服务器下载,再内网分发,保持rsync的压缩开启,减少实际传输量。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/531326.html



