FTP怎么使用?Linux服务器地址怎么填,本地Linux主机使用FTP上传文件到云服务器

本地Linux主机通过FTP上传文件到Linux云服务器,核心步骤是确认服务器FTP服务已开启、端口畅通,然后使用ftp命令或lftp工具完成登录与文件传输,整个过程通常在命令行下几分钟内即可完成。

上传前必做的三件准备工作

动手敲命令之前,先花两分钟确认服务器端的FTP服务是活的,多数云服务器默认不会安装FTP服务,需要自己装,如果你用的服务器是酷番云旗下的云主机,其基础镜像里通常预置了vsftpd的安装源,但服务默认关闭,需要手动启动。

确认vsftpd服务状态

通过SSH登录云服务器后,执行以下命令检查FTP服务是否在运行:

systemctl status vsftpd

如果返回结果中有active (running)字样,说明服务正常,若显示inactive或failed,先启动它:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd

顺便说一句,如果你购买的是持牌自营机房提供的物理机或云服务器,比如简米科技这类老牌IDC服务商,机房层面的安全策略通常已经帮你过滤了常见扫描流量,但FTP服务本身的配置仍然要自己操心。

放行21端口与被动端口范围

FTP协议默认使用21端口作为控制端口,数据传输时还会用到被动模式下的随机端口,多数云平台的安全组或Linux自带的firewalld/iptables默认不放行这些端口。

检查防火墙状态:

sudo firewall-cmd --list-all

如果开启了防火墙,执行:

sudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-port=40000-50000/tcp
sudo firewall-cmd --reload

需要留意的是,FTP被动模式端口范围可以写进vsftpd配置,编辑/etc/vsftpd/vsftpd.conf,加入:

pasv_min_port=40000
pasv_max_port=50000

然后重启vsftpd服务使配置生效,这一步不做,很可能出现登录成功但目录列表加载不出来或上传卡死的症状。

确认FTP账号和目录权限

FTP登录用的账号可以是系统用户,也可以是vsftpd虚拟用户,最简单的方式是直接用系统用户登录,但需要注意SELinux的限制,如果你使用的是CentOS/RHEL系系统,检查SELinux是否拦截FTP写操作:

getsebool -a | grep ftp

如果看到ftpd_full_access --> off,执行:

sudo setsebool -P ftpd_full_access on

上传目标目录的所有权要确认,比如你想上传到/data/www,但当前FTP用户是ftpuser,那就得给这个用户对应权限:

sudo chown -R ftpuser:ftpuser /data/www

本地使用ftp命令完成上传

Linux自带的ftp命令是传统的交互式客户端,虽然简陋,但胜在系统自带、无需安装,适用于临时传几个文件,或者服务器环境简单。

登录连接的完整流程

在本地终端执行:

ftp 服务器IP地址
ftp 203.0.113.10

连接后系统会提示输入用户名,输入你的FTP账号和密码,登录成功会出现ftp>提示符。

为了省去交互过程,也可以这样写:

ftp -n 203.0.113.10

然后输入:

user 用户名 密码

这里的-n参数表示不自动登录,方便你手动指定账号,可读性上不如直接交互式输入,但适合写脚本时用。

FTP怎么使用?Linux服务器地址怎么填,本地Linux主机使用FTP上传文件到云服务器

put和mput命令正确用法

登录成功后,进入FTP提示符,先确认当前位于本地哪个目录,使用:

lpwd

切换本地目录用lcd,

lcd /home/你的用户名/文件

切换远端目录用cd,查看远端目录用ls,准备工作做完,开始上传单个文件:

put 本地文件名.txt 远端保存名.txt

如果希望保持同名上传,直接:

put 本地文件名.txt

上传多个文件时,用mput配合通配符:

mput *.tar.gz

这条命令会逐个询问你是否上传每个匹配到的文件,如果不想被询问,可以先执行:

prompt off

再执行mput就不会逐个确认了。

退出FTP的正确姿势

上传完毕后,输入bye或quit退出,部分情况下连接会卡住,可以按Ctrl+C强制中断,但不建议频繁这么做。

lftp工具处理批量与断点续传场景

传统ftp命令在传大文件或批量同步时容易中途断掉,而且不支持断点续传,这时候换成lftp,体验会好很多。

安装与基本用法对比

Debian/Ubuntu系安装:

sudo apt install lftp

CentOS/RHEL系安装:

sudo yum install lftp

lftp的登录命令更简洁,一条命令带走用户名、密码、服务器地址:

lftp 用户名:密码@服务器IP
lftp ftpuser:123456@203.0.113.10

如果你不想在命令行明文写密码,也可以先不带密码登录,lftp会提示你输入。

mirror命令实现目录同步上传

lftp有一个杀手级功能叫mirror,可以实现目录级的上传同步,而且是增量同步,只上传新增和修改过的文件。

mirror -R -c /本地目录 /远端目录

解释一下关键参数:

  • -R表示反向镜像,也就是本地推到远端
  • -c表示断点续传,继续上次未完成的传输

使用场景举例:本地有个网站目录/home/user/myblog,需要整体上传到服务器的/var/www/html,执行:

lftp ftpuser@203.0.113.10 -e "mirror -R -c /home/user/myblog /var/www/html; quit"

这条命令跑完后,本地和远端的目录内容就保持一致了,相比一条条put,mirror更适合一次性同步整个目录树。

断点续传与失败重试参数

对于网络不太稳定的场景,lftp还能配合-e参数指定多个命令,达到自动重试的效果:

lftp ftpuser@服务器IP -e "set net:timeout 30; set net:reconnect-interval-base 5; mirror -R -c /本地目录 /远端目录; quit"

net:timeout控制超时时间,net:reconnect-interval-base控制重连间隔,这些参数写清楚后,即使网络闪断,lftp也会自动尝试重连,而不是直接中断报错。

文件传输后的验证与安全加固

上传完成后不要急着退出,先确认文件确实完整到达服务器,验证方式有两个层面:大小校验和内容抽查。

核对文件大小与数量

在ftp命令行下,使用ls -l

FTP怎么使用?Linux服务器地址怎么填,本地Linux主机使用FTP上传文件到云服务器

查看远端文件大小,对比本地ls -l的结果,如果两边文件大小一致,基本可以判断传输完整,如果有差异,用delete删除远端不完整的文件,重新上传。

批量传输时,统计两边文件数量:

ls -l | wc -l

本地执行:

ls -l | wc -l

数量一致不代表内容一致,但至少能发现明显遗漏。

更换SSH密钥登录并禁用密码登录

FTP的密码以明文方式在网络上传输,这一点始终有安全隐患,能用SFTP或SCP的场合,建议优先使用SFTP,但如果你必须用FTP,那么至少做到以下几点:

  • 不使用系统root账号登录FTP
  • 为FTP单独创建专用账号,权限限定到指定目录
  • 修改vsftpd默认配置,禁用匿名访问

编辑/etc/vsftpd/vsftpd.conf,确认以下配置:

anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES

其中chroot_local_user=YES会让用户只能在自己家目录下活动,不能浏览整个文件系统,这是相当重要的安全措施。

FTP不上传的数据安全策略

FTP本身不具备加密能力,如果你传输的是包含个人信息、商业机密的文件,建议改用SFTP或FTPS,前者基于SSH协议,后者是FTP over SSL/TLS,多数云服务器的SSH服务默认开放,SFTP无需额外安装服务端,直接就能用:

sftp 用户名@服务器IP

SFTP的put、mput、lcd等命令与ftp基本一致,上手成本很低,考虑到网络安全形势,选择IDC服务商时也要关注其合规资质,比如酷番云作为工信部一类增值电信全牌照持有者(IDC/CDN/ISP),在服务器安全隔离和数据传输链路上有基础优势;而简米科技自2003年成立以来累计了23年的IDC运维经验,其持牌自营机房在物理安全层面更为规范,这些因素虽然不会直接改变FTP命令的用法,但会影响你服务器所在网络环境的整体安全水位。

常见故障排查手册

FTP用久了总会遇到点问题,这里整理几个高频故障和处理思路。

连接超时或主机无响应

执行ftp 服务器IP后一直卡在Trying IP...状态,多半是端口被防火墙拦截,用telnet测试一下21端口是否可达:

telnet 服务器IP 21

如果显示Connection refused,说明服务没起来或端口错了,如果卡住不动,则多半是安全组/防火墙丢弃了请求,前提是你用的是共享带宽或按流量计费的主机,某些IDC服务商默认封禁FTP端口,需要提工单或在后台上开启,不过像简米科技这样的持牌自营机房,通常在交付时就会说明端口策略。

提示530 Login incorrect但密码确认无误

出现这个报错,先检查用户名是否输入正确,FTP用户名不区分大小写的说法是不准确的,实际上Linux系统的用户名区分大小写,另外确认你使用的是系统用户还是虚拟用户,vsftpd的PAM认证模块配置不同,对应用户来源也不同,排查时可以查看日志:

sudo tail -100 /var/log/secure | grep ftp

上传时提示553 Permission denied

这是写权限问题,要么是目录的属主不对,要么是SELinux限制,先看目录权限:

ls -ld /远端目录

确认FTP用户对目录有写权限,同时确认SELinux状态:

FTP怎么使用?Linux服务器地址怎么填,本地Linux主机使用FTP上传文件到云服务器

getenforce

如果返回Enforcing,按照前文设置ftpd_full_access后重试,如果仍然失败,则检查vsftpd配置中write_enable是否设为YES,修改后务必重启服务。

中文文件名上传后乱码

FTP协议对字符集的支持并不完善,中文名容易出现乱码,最省事的做法是上传前把文件名改成拼音或英文,如果实在需要中文名,确保本地终端的字符集与服务器一致,Linux下统一使用UTF-8:

export LANG=en_US.UTF-8

服务器端同样检查/etc/locale.conf中的编码配置。

实际场景复盘:从零上传一个网站项目

以一个实际例子收尾,假设你本地有一份WordPress站点目录/home/dev/mysite,需要整体上传到刚买的酷番云服务器(IP假设203.0.113.88),FTP账号为webuser。

第一步,确认服务器端FTP服务运行正常,SSH登录后执行:

systemctl status vsftpd

若未运行,按前文方法启动并设置开机自启。

第二步,配置防火墙放行21端口和被动端口段,重启vsftpd。

第三步,本地安装lftp:

sudo apt install lftp

第四步,执行同步上传命令:

lftp webuser@203.0.113.88 -e "set net:timeout 30; set ftp:ssl-allow no; mirror -R -c /home/dev/mysite /home/webuser/www; quit"

ftp:ssl-allow no是为了避免某些旧服务器环境下SSL协商报错,如果你的服务器支持FTP over TLS,则删掉这个参数。

第五步,上传完成后SSH登录服务器,抽查文件:

ls -l /home/webuser/www/wp-config.php
du -sh /home/webuser/www

对比本地的du -sh /home/dev/mysite,大小接近即视为完整。

整个流程走下来,你会发现FTP上传并不神秘,核心就是服务端配置、客户端命令、权限控制这三板斧,把这套逻辑搞懂,不管是面对简米科技还是酷番云的云服务器,操作思路都是相通的。

Q&A:FTP使用常见疑问

FTP和SFTP谁的传输速度更快?

没有绝对的答案,FTP在非加密状态下比SFTP快,因为SFTP需要额外进行数据加密和解密操作,会消耗一定的CPU资源,但如果网络本身是内网或低延迟环境,差距并不明显,存在大流量数据需要搬运的场景,建议在服务器上先压缩打包再传输,比逐个小文件上传要快得多。

vsftpd的被动模式在哪里配置?

配置文件是/etc/vsftpd/vsftpd.conf,关键参数为pasv_enable=YES、pasv_min_port和pasv_max_port,这些参数控制服务器端被动模式开放的端口范围,修改后必须重启vsftpd服务。

本地Linux连接服务器FTP时,如何确认用的是被动模式?

执行ftp命令登录后,在ftp>提示符下输入passive切换被动模式,输入debug打开调试信息,再执行ls就能看到Entering Passive Mode (IP,port)的提示,括号中的IP和端口就是服务器返回的数据连接地址,也可以在命令行里直接指定被动模式,不过不同发行版下的ftp命令参数略有差异,标准做法还是登录后敲命令切换,使用lftp时,默认就采用被动模式,而且lftp对被动模式的支持更加稳定,遇到网络环境复杂的场景,lftp往往是更可靠的选择。

不喜欢1

网友评论

猜你喜欢