FTP登录后卡在“正在列出目录”是因被动模式数据通道被拦截,需同步配置安全组(39000/40000)、宝塔防火墙(39000:40000)、Pure-FTPd的PassivePortRange与ForcePassiveIP(设为公网IP),并重启服务,客户端还需启用被动模式且禁用IPv6。

FTP能登录但卡在“正在列出目录”,基本不是密码错、也不是权限问题,而是被动模式的数据通道被拦了。核心就三件事:端口得放通、配置得对上、服务得重启。
安全组和宝塔防火墙必须同步放行被动端口范围
Pure-FTPd 默认用 39000 40000 这个范围开数据端口,但云平台(腾讯云/阿里云)安全组规则里写 39000-40000 会失败——必须用斜杠:39000/40000。宝塔面板自己的防火墙又不认斜杠,它只认英文冒号:39000:40000。
- 云控制台安全组加两条入站规则:
21/21和39000/40000,协议都是 TCP - 宝塔【安全】→【防火墙】→【放行端口】输两次:
21和39000:40000(注意是冒号,不是短横或斜杠) - 改完别忘了点“应用”或“生效”,有些平台要手动触发
Pure-FTPd 的 PassivePortRange 和 ForcePassiveIP 必须匹配公网 IP
配置文件里写的端口范围,得和你前面两步放行的一致;而 ForcePassiveIP 如果还指向 192.168.0.1 或 127.0.0.1,客户端拿到内网地址去连,肯定连不上。
- 进【软件管理】→【Pure-Ftpd】→【设置】→【配置修改】
- 搜
PassivePortRange,确认是未注释的39000 40000(中间空格,不是符号) - 搜
ForcePassiveIP,删掉行首#,等号后改成你的服务器真实公网 IP(不是本地、不是内网) - 保存后必须点【重启服务】,不是“重载配置”——改完不重启等于没改
客户端启用被动模式 + 禁用 IPv6 是常见补救动作
FileZilla 默认可能走 IPv6,但 Pure-FTPd 通常只监听 IPv4,握手直接失败。这不是服务器问题,是协议层不匹配。
- FileZilla → 【站点管理器】→ 编辑目标站点 → 【高级】→ 勾选“强制使用被动模式”
- 同一页取消勾选“尝试使用 IPv6 地址”
- 如果仍卡住,可临时换 FlashFXP 测试——它对被动模式兼容性更稳
最容易漏的是:改了 ForcePassiveIP 却没验证是否真生效。Pure-FTPd 日志里一旦出现 EPRT failed 或 Connection refused by server,八成就是这里没对上。重启服务后,建议立刻用 ftp -v 手动连一次,看返回的 PASV 响应里 IP 和端口是不是你设的那个公网 IP 和 39000~40000 之间的数。


















