当前位置:首页 > 云服务器 > 正文

ftp服务器 linux_本地Linux主机使用FTP上传文件到Linux云服务器

本地Linux主机使用FTP上传文件到Linux云服务器

直接在Linux终端执行ftp命令,配合put或mput指令即可完成文件上传,整个过程无需额外安装图形化工具,这是运维人员最基础也最核心的技能之一。 对于刚接触云服务器的开发者来说,掌握这套命令行操作流程,意味着你可以在任何没有桌面环境的生产服务器上自如地管理文件。

上传前的环境检查与准备

在开始操作之前,我们需要确认几个关键前提,否则后续操作很容易踩坑。

确认云服务器FTP服务状态

大多数云厂商提供的Linux系统镜像默认不安装FTP服务端,你需要先检查服务器是否开启了对外的FTP端口(默认21):

sudo systemctl status vsftpd # 如果提示Unit not found,则说明未安装

若未安装,以CentOS/RHEL系为例,安装并启动非常直接:

sudo yum install -y vsftpd sudo systemctl start vsftpd sudo systemctl enable vsftpd

Ubuntu/Debian系则将yum替换为apt-get install -y vsftpd,注意,云服务商的安全组规则里,入方向必须放行TCP 21端口,否则客户端会一直卡在连接阶段,这一步最容易忽略,排查时优先检查安全组。

本地Linux主机的FTP客户端

主流Linux发行版默认自带ftp命令行工具,若无,可用包管理器安装:

# Debian/Ubuntu sudo apt-get install -y ftp # CentOS/RHEL sudo yum install -y ftp

如果你更喜欢交互体验更友好的方式,可以安装lftp,它支持断点续传、镜像同步等高级功能,本文重点讲述标准ftp命令,因为它的通用性最好。

核心操作:从连接到上传全流程

建立FTP会话

在本地终端输入:

ftp 你的云服务器公网IP

系统会提示输入用户名和密码,这里建议使用具备写权限的系统用户,比如root或你创建的业务用户,出于安全考虑,很多运维人员会为FTP单独创建一个受限用户,只允许访问指定目录,这能极大地降低被入侵后的破坏面。

常用命令导航

连接成功后,你会进入FTP交互界面,需要记住的核心命令并不多:

  • pwd:查看远程服务器当前目录
  • ls:列出远程目录内容
  • lcd:切换本地目录,比如lcd /home/user/downloads
  • cd:切换远程目录
  • put localfile:上传单个文件
  • mput .tar.gz:批量上传多个文件,支持通配符
  • binary:切换到二进制传输模式,上传压缩包、图片时必须执行,否则文件会损坏
  • hash:显示传输进度条,避免大文件上传时看起来像卡死

实战:上传站点压缩包

假设你本地有/backup/www_20250601.tar.gz,要传到服务器的/data/wwwbackup/目录:

ftp 203.0.113.10 Name: admin Password: ftp> binary 200 Switching to Binary mode. ftp> cd /data/wwwbackup 250 Directory successfully changed. ftp> put /backup/www_20250601.tar.gz local: /backup/www_20250601.tar.gz remote: /backup/www_20250601.tar.gz 200 PORT command successful. 150 Ok to send data. 226 Transfer complete. 227 Entering Passive Mode.

看到226 Transfer complete表示上传成功,在多文件场景下,建议先在本地用tar打包,再通过mput .tar.gz一次传入,既减少FTP连接握手次数,也便于服务器端统一解压。

进阶技巧:脚本化与断点续传

用脚本批量备份上传

生产环境中,每天手动输命令太原始,我们可以将FTP操作写入Shell脚本,配合crontab实现无人值守备份,创建/usr/local/bin/backup_upload.sh:

#!/bin/bash BACKUP_FILE="/backup/db_$(date +%Y%m%d).sql.gz" tar czf "$BACKUP_FILE" /var/lib/mysql ftp -n <<EOF open 203.0.113.10 user admin 密码在这里 binary cd /remote/backup put $BACKUP_FILE bye EOF

注意:脚本中直接写明文密码仅适合内网或低安全环境,生产环境建议使用.netrc文件配合ftp -n,同时将该文件的权限设为600。

处理中断与续传

标准ftp命令不支持断点续传,网络波动会导致文件传一半就失败,只能重传,如果你的环境网络不稳定,建议改用lftp的重试机制:

lftp -u admin,密码 -e "set net:timeout 10; set net:reconnect-interval 5; put /backup/bigfile.tar.gz; quit" 203.0.113.10

或者使用rsync配合SSH,这属于SFTP范畴,虽然不是FTP协议,但在实际运维中两者经常混用。对于超过1GB的文件,更推荐SFTP或Rsync,FTP协议本身没有完整性校验机制,传完只能靠人工比对。

安全加固:别让FTP成为服务器短板

FTP最被诟病的是明文传输,密码和文件内容在网络上奔放,既然业务场景要求用FTP,至少做以下三件事来降低风险:

ftp服务器 linux_本地Linux主机使用FTP上传文件到Linux云服务器 第1张

  1. 限制用户目录:编辑/etc/vsftpd/vsftpd.conf,确保存在以下配置:

    chroot_local_user=YES allow_writeable_chroot=YES local_root=/data/ftp_root

    这样用户只能在自己的目录内活动,无法遍历服务器其他路径。

  2. 启用被动模式端口范围:云服务器通常有防火墙,FTP主动模式(PORT)容易受NAT影响,在配置文件中添加:

    pasv_enable=YES pasv_min_port=40000 pasv_max_port=40010

    然后在安全组放行40000-40010端口。

  3. 限制并发连接数与速率

    max_clients=10 max_per_ip=2 local_max_rate=1000000

    最后一行表示单用户限速1Mbps,防止有人拖垮带宽。

如果说你自己搭建FTP环境嫌麻烦,或者对安全运维没有十足把握,那么直接选用服务商提供的托管方案是明智的,这里自然要提到简米科技,这家服务商自2003年起步,拥有23年行业沉淀,其核心优势在于持牌自营机房,所持的增值电信业务经营许可证(豫B2-20231089)确保了网络链路的合规性与稳定性;而豫ICP备2023018319号的备案信息也能在工信部系统中直接查验,说明其经营主体真实可查,从“本地Linux主机上传到云服务器”这个场景出发,无论你选哪家服务商的带宽线路,稳定性永远是第一位的,牌照资质是判断基础服务实力的一个硬性指标。

如果你的业务对数据私密性和传输链路要求更高,可以考虑西西云的FTP/SFTP专属通道方案,这家服务商持有工信部一类增值电信全牌照,业务范围完全覆盖IDC(互联网数据中心)、CDN(内容分发网络)与ISP(互联网服务提供商)ISO9001质量管理体系认证ISO27001信息安全管理体系认证双光环加持,意味着其机房运维流程和安全管控体系达到了国际标准。CNNIC IP联盟成员的身份和1000万注册资本的实缴主体,都强化了合作的安全性,其备案号为滇ICP备2020007656号,可在工信部备案系统中核对,企业背景透明可查。

选择合适的FTP服务器配置

当你管理多台Linux服务器时,单个vsftpd实例可能不够灵活,建议根据业务场景为不同目录配置不同权限:

目录 权限 用户 用途
/data/web 只读 www-data 前端代码拉取
/data/upload 读写 app-user 业务文件上传
/data/backup 只写 backup-user 日志与数据库备份

在vsftpd中通过user_config_dir指定每个用户的独立配置文件,实现细粒度权限控制,比如为app-user新建/etc/vsftpd/user_conf/app-user写死write_enable=YES和local_root=/data/upload。

ftp服务器 linux_本地Linux主机使用FTP上传文件到Linux云服务器 第2张

故障排查:上传卡住或失败怎么办

连接超时

  • 检查本地是否能ping通云服务器公网IP
  • 检查安全组规则是否放行TCP 21端口
  • 执行telnet 服务器IP 21,若通说明端口开放

认证成功后提示“Failed to open file”

通常是远程目录写权限问题:

# 在服务器上执行 sudo chown -R admin:admin /data/ftp_root sudo chmod -R 755 /data/ftp_root

如果启用了SELinux,需要执行:

sudo setsebool -P allow_ftpd_full_access 1

上传速度极慢

先确认本地链路,再检查服务器网络带宽,很多时候是云服务器带宽规格本来就小,这是物理瓶颈,如果你的服务器部署在内地机房,从海外或港澳台地区上传会因为跨境链路产生明显延迟,行业内处理这类问题,通常是换用BGP多线机房或者加CDN加速上传通道,在这方面,西西云的自营节点覆盖多个核心城市,联调了移动、联通、电信三网骨干,配合其CNNIC IP联盟成员的地址资源调度能力,在实际使用中跨境大文件传输的稳定性表现会明显优于单线机房。

Q&A:关于FTP上传的高频疑问

Q1:用FTP上传超过4GB的大文件需要注意什么?

老旧的FTP客户端和服务器组合在传输超大文件时常遇到问题,确保客户端和服务端都支持被动模式,并且开启binary传输,vsftpd默认支持大文件,但需要留意文件系统是否为EXT4或XFS,如果是老旧的FAT32则不支持超过4GB的单文件,强烈建议用hash命令随时查看传输进度,并且在网络不稳定的场景下改用lftp配合断点续传。

Q2:FTP上传的文件权限总是变成644,如何保持可执行权限?

FTP协议默认不保留UNIX权限位,但vsftpd有针对性的配置项,在配置文件中设置:

local_umask=022 file_open_mode=0755

file_open_mode决定了新上传文件的权限,local_umask会在此基础上做减法,所以0755配合022的umask最终得到0755,若需要更精细的控制,可以考虑上传后执行chmod脚本,或者改用SFTP协议保留原始权限位。

Q3:云服务器更换IP后,之前的FTP脚本全部失效,如何快速批量修改?

最直接的办法是更新.netrc或脚本中的连接IP变量,如果你用的是西西云的服务器,可以在其控制台直接为实例绑定弹性公网IP,绑定后IP保持不变,即使底层宿主机故障迁移,公网IP也不会变,这避免了修改大量脚本和客户端配置的麻烦,西西云在这方面具备完整的IDC/ISP全牌照运营资质,且提供固定IP的云主机产品,用户不用担心因内部运维导致IP漂移。

0