在阿里云ECS上搭好FTP服务后,客户端常见的报错大致是三种:连接超时、425无法建立数据连接、530登录失败。它们分别对应网络层、传输模式和账号配置三类问题。按顺序一层层排查,一般不用花太久就能找到原因。

先看报错,判断故障在哪一层
FTP连接分两步走。客户端先连上控制端口21完成登录,之后再通过数据端口传输目录和文件。两步里哪一步出了问题,现象不一样。所以先看清报错内容,再去改配置,会少走很多弯路。
- 连接超时:多半是安全组或系统防火墙没有放行21端口。
- 425 Failed to establish connection:控制连接已经建立,数据端口被拦住了。
- 530 Login incorrect:网络是通的,问题出在账号、密码或用户的登录shell上。
案例一:安全组没放行,连接直接超时
某电商团队在杭州地域的ECS上部署了vsftpd。用FileZilla连接时,客户端一直停在“正在连接”,十几秒后超时。在服务器上执行ss -lntp | grep 21,可以看到vsftpd已经在监听,说明服务本身没问题。真正的原因在阿里云控制台的安全组:入方向只开放了22端口。给安全组加上TCP 21的入方向规则后,连接马上就通了。
放行的来源地址别直接填0.0.0.0/0。如果只有固定的办公网络需要访问,就填那个网络的公网IP段,范围越小越安全。
案例二:能登录,但列目录卡住
另一位开发者在华北地域的ECS上配置了FTP。登录成功后执行ls,客户端没有任何响应,最后报425。原因是服务器开启了被动模式,但配置里没有指定数据端口范围,也没有设置对外的公网地址。vsftpd在PASV响应里返回的是服务器的内网IP 172.16.x.x,客户端访问不到这个地址。
解决分两步。第一步,在vsftpd.conf中设置pasv_min_port和pasv_max_port,比如限定在40000到40100之间。第二步,把pasv_address设为ECS的公网IP。然后在安全组和系统防火墙里放行这段端口范围,重启服务。做完这些,列目录就恢复正常了。
案例三:密码没错,却一直返回530
一位运维给新建的FTP用户设置了正确的密码,但每次登录都返回530。检查后发现,这个用户的登录shell被设成了/sbin/nologin,这是专门给服务账号用的禁止登录shell。执行usermod -s /bin/bash 用户名可以改成可登录状态。不过,如果这个用户只是用来传文件,更稳妥的做法是保留禁止shell,在vsftpd里用chroot把用户限制在自己的目录里。这样既能传文件,也不会给账号额外的系统登录权限。
标准排查步骤
- 执行systemctl status vsftpd,确认服务状态为active。
- 执行ss -lntp | grep 21,确认21端口已经在监听。
- 到ECS控制台查看入方向规则,确认21端口和被动端口范围都已放行。
- 执行firewall-cmd –list-all,确认系统防火墙里也开放了同样的端口。
- 在本地执行telnet 公网IP 21。能连上,说明网络层是通的。
- 查看/var/log/vsftpd.log,区分是认证失败还是数据连接失败。
配置上要注意的几点
- 开启pasv_enable=YES时,pasv_min_port、pasv_max_port和pasv_address最好一起配,缺一个都可能出现425。
- 设置anonymous_enable=NO,关闭匿名登录,避免一个不需要的入口。
- 设置chroot_local_user=YES,需要时再开启allow_writeable_chroot=YES,把用户限制在自己的目录里。
- 如果要传输敏感文件,优先考虑SFTP,走22端口并使用密钥认证。
大多数阿里云FTP连接问题,都能归到安全组、被动模式或用户权限这三类里。先看报错,再按步骤逐层排查,基本就能找到原因。