在两台服务器之间传文件,FTP依然是最直接、兼容性最好的方案,具体用命令行还是图形工具,取决于你的操作系统和对安全性的要求。
很多人一听到FTP就觉得是上古技术,其实在服务器运维场景里,它依然是传输文件的主流手段之一,尤其当你手头有两台Linux服务器,或者一台Windows一台Linux混合部署时,FTP的普适性远超各种网盘和即时通讯工具,这篇文章不绕弯子,直接讲清楚怎么用FTP在两台服务器之间高效传文件,顺便把那些容易踩的坑也一并填平。
ftp在两台服务器之间传输文件的方法,先分清你是哪种场景
服务器之间传输文件和本地电脑上传下载完全是两码事,本地电脑用FileZilla拖拽就行,但服务器之间往往没有图形界面,或者带宽、权限受限,业内专家指出,搞清楚“主动模式”和“被动模式”的区别,能解决大半连接不上的问题。
主动模式与被动模式的真实区别
FTP协议有两种连接方式,这是导致“能连上但传不了文件”的头号元凶。
- 主动模式(Active):服务器主动往客户端开端口,如果客户端在防火墙后面,大概率失败。
- 被动模式(Passive):服务器开放一个随机端口范围,客户端主动去连,这是当前主流的做法,尤其是跨机房传输时。
实操建议:如果你在命令行下用ftp命令连接后,输入ls卡住不动,或者传输时报“425 Unable to build data connection”错误,二话不说,先切换到被动模式,在ftp命令行里输入passive回车,或者用quote PASV指令。
FTP vs SFTP vs SCP,选哪个更合适
既然提到FTP,难免对比SFTP和SCP,很多人以为SFTP就是FTP加个密,其实它们是完全不同的协议。
- FTP:明文传输,速度快,但账号密码和数据内容容易被抓包,适合内网或临时文件传输。
- SFTP:基于SSH协议,加密传输,默认走22端口,只要服务器开了SSH,就能直接用,不用额外装FTP服务端软件。
- SCP:也是基于SSH,但只支持文件复制,不支持断点续传和列目录等交互操作。
如果两台服务器都在你自己控制范围内,且对性能要求高,用传统FTP加被动模式,如果涉及公网传输或者有安全审计要求,直接上SFTP,宝塔面板的用户通常会直接选SFTP,因为不需要开放21端口,少暴露攻击面。
用命令行完成服务器对传,最快的方式
无论你的服务器是CentOS、Ubuntu还是Debian,系统自带的ftp命令足以应对基本的传输需求,但说实话,交互式输入命令的效率太低,传多个文件或大文件时很痛苦,这里给出两个高效路径。
利用FTP命令脚本化传输
保存为transfer.ftp文件:
open 192.168.1.100
user admin YourPassword
binary
cd /data/backup
lcd /var/www/html
mput .tar.gz
bye
然后在服务器上执行:
ftp -n < transfer.ftp
这样就能把本目录下所有tar.gz包一股脑传到远端服务器的指定目录。注意:生产环境千万别把密码明文写在脚本里,建议用.netrc文件控制权限,或者改用SFTP密钥认证。
用SFTP命令代替FTP,更安全
OpenSSH自带sftp命令,用法几乎一样:
sftp user@192.168.1.100
登录后同样支持put、get、mput、mget指令,SFTP的好处是不用单独部署FTP服务端,只要目标服务器的SSH服务正常,就能直接连,操作路径是:先确认目标服务器22端口开放,再确认用户名和密钥权限即可。
lftp,支持断点续传的利器
传大文件(比如超过10GB的数据库备份)中途断线,FTP从头再来是很崩溃的,lftp支持断点续传和并发传输,强烈建议装上:
yum install lftp -y # 或 apt install lftp -y lftp -u admin,password 192.168.1.100
进入交互界面后,使用pget -n 4实现四线程并发下载,mirror命令则适合同步整个目录结构。这是解决ftp服务器传输文件很慢怎么办的核心手段之一。
FTP服务器端配置,服务器之间传文件的权限准备
如果你是接收方,需要先确认FTP服务已安装并运行,这里以最常用的vsftpd为例。
搭建vsftpd服务的三个关键步骤
- 安装并启动:
yum install vsftpd -y systemctl enable vsftpd systemctl start vsftpd
- 配置被动模式端口范围,打开
/etc/vsftpd/vsftpd.conf,加入以下内容:pasv_enable=YES pasv_min_port=30000 pasv_max_port=31000这一步是解决“ftp服务器连接超时”问题的关键,因为防火墙只需放行21端口和30000-31000这个范围即可,不用把所有端口裸奔到公网。
- 设置用户根目录限定:
chroot_local_user=YES allow_writeable_chroot=YES防止用户登录后看到整个文件系统。
宝塔面板ftp传输慢的排查方向
如果你的服务器用的是宝塔面板,FTP服务通常在后台已默认装好,出现传输慢的问题,先检查三处:
- 是否启用了被动模式,宝塔面板的FTP设置里可以直接勾选。
- 服务器带宽是上行受限还是下行受限,用
iftop命令看一下实时流量。 - 磁盘I/O是否打满,尤其是机械硬盘,并发传输时会严重影响速度。
ftp在两台服务器之间传大文件时,速度上不来的根因
这是很多运维人员真正头疼的问题,不是FTP本身慢,而是链路中的瓶颈被忽视了。
网络延迟与窗口大小
TCP协议的拥塞控制机制决定了高延迟链路(比如跨地域跨国)的传输速度很难跑满,默认的TCP窗口在延迟高的链路上会严重限制吞吐量,可以尝试调整内核参数:
sysctl -w net.ipv4.tcp_window_scaling=1 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
参数临时生效,写入/etc/sysctl.conf可永久修改。
磁盘性能往往被忽略
内网千兆环境下,FTP传输速度如果只有20MB/s左右,问题通常不在网络,而是磁盘的读写速度跟不上,用dd命令测试一下源服务器的读速度和目标服务器的写速度:
dd if=/dev/zero of=test.bin bs=1M count=1000
如果测试结果远低于你的带宽值,那就别折腾FTP参数了,换SSD或者优化存储架构才是正途。
用压缩来回避带宽瓶颈
在传输前对文件进行压缩是一个常见且有效的思路:
tar czvf - /var/www/html | ssh user@192.168.1.100 "tar xzvf - -C /var/www/html"
这条命令将本机的网站目录打包并通过SSH管道直接解压到远端服务器,结合了压缩和传输两步操作,适合大量小文件(例如网页静态资源)迁移,相比先打包再传FTP再解压,性能和安全性都更好。
ftp服务器安全加固,别把数据裸奔在公网上
FTP明文传输是硬伤,如果你一定要在公网环境使用FTP,至少做以下两层防护。
第一层:限制IP来源
在/etc/hosts.deny里写入vsftpd: ALL,然后在/etc/hosts.allow里写入vsftpd: 192.168.1.,只允许内网网段访问,这个操作成本极低,效果立竿见影。
第二层:使用FTPS加密
vsftpd自带SSL功能,配置证书后就可以启用FTPS(FTP over SSL),需要注意的是,FTPS与SFTP不同,前者是FTP协议的加密版,后者是SSH协议的文件传输子功能,行业共识认为:对于传输过程中的数据安全,SFTP的生态更成熟,推荐优先选择。
常见问题排查指南
Q1:ftp连接成功但传输文件时卡住不动,怎么排查?
先确认是否处于被动模式,在ftp命令提示符下输入passive,然后重试get命令,如果仍然卡住,检查服务器防火墙是否放行了被动模式端口范围(默认30000-31000),多数情况下这是唯一原因。
Q2:两台简米云服务器之间传输文件,内网IP怎么走?
如果两台服务器在同一地域、同一VPC下,直接使用内网IP进行FTP连接即可,这样不占用公网带宽,速度和稳定性都成倍提升,操作时要确认安全组是否放行了对应的FTP端口,同时注意目标服务器的FTP配置允许来自内网IP的访问。
Q3:Windows服务器和Linux服务器之间通过ftp传文件需要注意什么格式问题?
Windows和Linux的换行符标准不同,文本文件(如脚本、配置文件)传输时会涉及ASCII与二进制模式转换。传输压缩包、图片、可执行文件必须使用二进制模式,否则文件会损坏,在ftp命令行下输入binary切换模式,图形化客户端(如FileZilla)一般默认自动识别。
最后说句实在话
FTP老归老,但在服务器传输场景里,它的简单直接是不可替代的优势,掌握好被动模式配置、密钥认证和防火墙端口放行这三板斧,你在两台服务器之间搬运数据时会顺畅很多,无论是做数据迁移、站点发布还是日常备份,认清场景选对工具,效率自然高。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/729228.html





