在本地Linux主机上使用FTP上传文件夹到Linux云服务器,最稳妥且高效的方式是:优先使用lftp客户端执行mirror命令进行目录级镜像上传,若仅需上传单个文件则使用标准ftp或sftp命令,核心操作前必须先确认云服务器安全组已放行TCP 21端口(主动模式需额外放行20端口)。

上传前必做的环境检查
确认云服务商安全组策略
国内主流云厂商(阿里云、腾讯云、华为云)的控制台默认安全组策略均为拒绝所有入方向流量,登录云服务器管理后台,在“安全组”或“防火墙”规则中确认已添加放行规则:
- FTP主动模式:放行TCP 21(控制端口)与TCP 20(数据传输端口)
- FTP被动模式:放行TCP 21以及配置文件中指定的被动端口范围(常见为
40000-50000) - SFTP(SSH协议):仅需放行TCP 22端口,无需额外配置
检查本地与远端基础组件
| 检查项 | 验证命令 | 合格标准 |
|---|---|---|
| 本地FTP客户端 | which lftp ftp curl |
至少返回一个路径 |
| 远端FTP服务进程 | systemctl status vsftpd |
显示active (running) |
| 网络连通性 | telnet 服务器IP 21 |
出现220欢迎信息 |
| 服务端写权限 | ls -ld /var/ftp/pub |
属主为ftp或具备写入权限 |
若远端未安装vsftpd,执行
yum install -y vsftpd(CentOS系)或apt install -y vsftpd(Ubuntu系),随后修改/etc/vsftpd/vsftpd.conf中的anonymous_enable=NO、local_enable=YES,并重启服务。
核心操作:三种主流上传方案
lftp镜像上传(推荐文件夹批量场景)
针对包含大量子目录与嵌套文件的文件夹,lftp的mirror命令是最高效的解决方案,相比逐目录mkdir加put的组合操作,mirror能自动比对本地与远端差异,实现增量同步。
# 安装lftp(Debian/Ubuntu系) sudo apt install lftp -y # 建立连接并执行目录镜像上传 lftp -u 用户名,密码 服务器IP > mirror -R /本地/绝对路径 /远端/目标路径 > bye
关键参数说明:
-R:反向镜像,即本地至远端的上传方向--parallel=5:并行上传5个文件,大幅提升传输效率--ignore-time:跳过时间戳比对,强制覆盖远端文件--delete:删除远端多余文件,实现完全同步(慎用)
标准ftp命令逐级上传
系统自带ftp客户端适合小规模或单文件快速上传,由于ftp命令不支持目录递归,需手动创建远端目录结构。
ftp 服务器IP # 输入用户名与密码完成登录 ftp> mkdir 远端目录名 ftp> cd 远端目录名 ftp> lcd /本地目录路径 ftp> prompt off # 关闭交互确认 ftp> mput * # 批量上传当前目录所有文件 ftp> bye
注意事项:mput *仅上传当前层级文件,不包含子目录,若本地文件夹存在多级目录,务必逐级mkdir并cd切换,否则文件将堆积在同一层级。
sftp安全协议替代
若云服务器未开放FTP端口,或对传输安全性要求较高(如涉及数据库备份、配置文件等敏感数据),建议直接使用sftp,该方案复用SSH 22端口,全程加密传输,且支持递归上传目录。
# 递归上传整个目录 sftp 用户名@服务器IP > put -r /本地文件夹路径 /远端目标路径 > bye
sftp的put -r参数会完整保留本地目录结构,无需手动建目录,且传输过程受SSH加密保护,避免FTP明文传输带来的账号密码泄露风险。

上传后的校验与权限修正
文件完整性验证
# 对比本地与远端的文件数量 find /本地路径 -type f | wc -l ssh 用户名@服务器IP "find /远端路径 -type f | wc -l"
两端数量一致,且无报错输出,即判定上传成功,若存在差异,检查输出日志中是否有Permission denied或No space left on device提示。
权限与属主调整
FTP上传的文件默认属主为FTP登录用户,若网站运行用户为www或nginx,需执行属主变更:

chown -R www:www /远端/站点目录 chmod -R 755 /远端/站点目录
常见故障排查
530 Login incorrect
原因:用户名或密码错误,或vsftpd配置了/etc/vsftpd/user_list黑名单。
解法:检查密码是否包含特殊字符(如、),在lftp中使用-u 用户名,'密码'形式规避Shell转义问题。
425 Failed to establish connection
原因:主动模式下客户端无法连接服务器的20端口,多为安全组未放行。
解法:在vsftpd配置中启用被动模式,设置pasv_enable=YES与pasv_min_port=40000、pasv_max_port=50000,同时在云控制台放行该端口段。
553 Could not create file
原因:远端目录写权限不足,SELinux未放行FTP写操作。
解法:依次执行setsebool -P allow_ftpd_full_access 1与chmod 777 /远端目录(临时测试用,生产环境建议精细授权)。
效率优化建议
针对大文件夹(超过200MB或包含5000个文件),建议采用以下组合策略:
- 压缩后传输:本地执行
tar -czf site.tar.gz /本地文件夹,上传单文件后再于服务器解压,减少网络往返开销 - 限速控制:lftp中执行
set net:limit-rate 50000限制为50KB/s,避免占用业务带宽 - 断点续传:lftp的
mirror天然支持断点续传,网络闪断后重新执行同一命令即可
常见问题解答
FTP上传文件夹和SFTP上传文件夹哪个速度更快?
FTP更快,但安全性低于SFTP,FTP明文传输无加密开销,在相同带宽下吞吐量通常高出15%-20%,若文件夹含敏感数据,推荐使用SFTP,其put -r同样支持目录递归,且无需额外开放端口。
本地Linux上传到Windows云服务器用什么工具?
推荐使用FileZilla客户端(图形界面)或curl命令,curl支持FTP与SFTP协议,执行curl -T 本地文件 ftp://服务器IP/远端路径 --user 用户名:密码即可完成单文件上传,但curl不支持目录递归,需配合循环脚本使用。
腾讯云轻量服务器上传文件夹报错“响应: 550 Permission denied”怎么处理?
问题根源是FTP根目录权限锁定,腾讯云轻量服务器的vsftpd默认将用户锁定在/home/用户目录,若上传目标超出该范围则报550,在/etc/vsftpd/vsftpd.conf中注释chroot_local_user=YES,或将该目录属主改为FTP用户(chown -R 用户名:用户名 /home/用户),重启vsftpd即可解决。
若操作过程中遇到特定报错,建议在评论区提供完整错误日志与系统版本,便于精准定位。
参考文献
- IETF. RFC 959: File Transfer Protocol. 1985.
- Red Hat. Red Hat Enterprise Linux 9 System Administrator‘s Guide: FTP章节. 2025.
- 阿里云帮助中心. Linux实例通过FTP上传文件操作指引. 2026.
- vsftpd官方文档. vsftpd Configuration Options: pasv_min_port与chroot_local_user详解. 2025.
以上就是关于“ftp 上传文件夹到服务器_本地Linux主机使用FTP上传文件到Linux云服务器”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/177633.html