Ubuntu 16.04 Server中lftp连接远程FTP服务器受阻问题排查
解决lftp卡在"Making data connection"的服务器端问题
这种情况我之前帮人排查过不少,结合你说的ftp命令能正常连接但lftp卡在建立数据连接的现象,大概率是FTP服务器的被动模式配置出了问题,或者lftp的默认行为和服务器不匹配。下面是几个最可能的服务器端原因及排查方向:
1. 被动模式(PASV)的端口范围未正确配置或开放
lftp默认优先使用被动模式(PASV),而传统的ftp命令可能默认用主动模式(PORT)。如果你的FTP服务器(比如vsftpd)没配置被动模式的端口范围,或者这些端口没在网络层面开放(哪怕你关了本地ufw,也要考虑机房硬件防火墙的限制),就会卡在数据连接这一步。
- 以vsftpd为例,检查
/etc/vsftpd.conf:- 确保
pasv_enable=YES(开启被动模式) - 添加或确认
pasv_min_port和pasv_max_port(比如pasv_min_port=30000,pasv_max_port=30100) - 重启vsftpd服务,同时确保这些端口在所有防火墙(包括硬件防火墙)中是开放状态
- 确保
2. NAT环境下被动模式的公网地址未配置
如果你的FTP服务器在NAT(比如路由器、云服务器的内网)后面,服务器默认会把内网IP返回给客户端,lftp拿到内网IP后根本无法建立数据连接,而ftp命令可能在某些场景下能自动适配这个问题。
- 还是以vsftpd为例,在
/etc/vsftpd.conf中添加:
重启服务后再测试pasv_address=你的服务器公网IP pasv_addr_resolve=YES # 如果用域名的话开启这个lftp连接。
3. 强制lftp使用主动模式验证问题
你可以先强制lftp使用主动模式(和ftp命令的默认行为一致),看看能不能正常执行命令,以此验证是不是被动模式的问题:
lftp -c "set net:max-retries 1; set ftp:ssl-allow off; set ftp:passive-mode off; open -u $FTP_USERNAME,$FTP_PASSWORD $FTP_HOST; ls ./public_html/testing;"
如果这个命令能成功,就坐实了是服务器被动模式的配置问题,回到前面两步去修复即可。
4. 查看FTP服务器日志定位具体错误
最直接的方式是去服务器上看FTP服务的日志,比如vsftpd的日志默认在/var/log/vsftpd.log,当你用lftp连接时,日志里会记录具体的错误信息(比如端口分配失败、地址返回错误等),这能帮你快速定位问题根源。
内容的提问来源于stack exchange,提问作者anton kham
相关产品推荐
相关产品推荐

