vsftpd错误:列出目录

31

我在亚马逊EC2上的Fedora实例中安装了最新版本的vsftpd,但是我遇到了以下错误:

在CuteFTP中:

COMMAND:> PASV 227 Entering Passive Mode (192,168,10,46,14,20)
COMMAND:> LIST
ERROR:> Can’t connect to remote server. Socket error = #10065.
ERROR:> PASV failed, trying PORT.

在Filezilla中:
Command: PASV Response: 227 Entering Passive Mode (192,168,10,46,14,20)
Command: LIST Error: Connection timed out
Error: Failed to retrieve directory listing.

尝试通过Shell连接并显示目录列表。

7个回答

71

我遇到了完全相同的问题... 这通常只影响使用被动模式的 GUI FTP 客户端(这是非常常见的)。例如,当使用标准的 FTP 命令行工具时,我能够成功登录并上传文件到我的 FTP 服务器。

纠正步骤如下:

  1. 在你的 /etc/vsftpd.conf 文件中添加以下设置:

    pasv_enable=YES pasv_min_port=64000 pasv_max_port=64321 port_enable=YES

  2. 根据你的情况,在你的 /etc/vsftpd.conf 文件中添加以下配置块之一(无论哪种方式,这都需要解析为公共可访问的 IP):

a:

pasv_address=<your-static-ip-most-likely-from-elastic-ips>
pasv_addr_resolve=NO

-或者-

b:

pasv_address=<your-publicly-resolvable-host-name>
pasv_addr_resolve=YES
  1. 在您的EC2实例安全组配置中,添加以下自定义入站TCP规则:
  • 为标准FTP启用20-21端口
  • 启用与上述配置部分中定义的被动端口(我使用了64000-64321)
  1. 重新启动您的vsftpd服务(根据您所使用的Linux版本而有所不同)

注意:PASV端口范围应该能够从防火墙和NAT之外可见。

参考资料:


1
我认为你混淆了pasv_max_port和pasv_min_port。 - Moshe Shaham
2
我之前已经配置了被动端口范围并打开了这些端口,但仍然遇到了相同的问题。尝试了一下将pasv_addr_resolve更改为YES,并将主机名替换为IP地址,现在被动连接又可以工作了。真奇怪。 - Doug Kavendek
有了这些配置,我甚至无法启动/重新启动守护程序 - pgrep vsftpd 什么都不返回 :( - Vitaly Zdanevich

20

4

对于我来说,版本为vsftpd-3.0.2-1.el5.x86_64.rpm的软件包有以下设置是有帮助的:

pasv_enable=YES
pasv_min_port=64000
pasv_max_port=64321
port_enable=YES
pasv_address=<your-static-ip-most-likely-from-elastic-ips>
pasv_addr_resolve=NO

感谢Longda!

3

这对我有用;

以下是在/etc/vsftpd.conf中的配置:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
pam_service_name=ftp
pasv_enable=YES
pasv_min_port=13000
pasv_max_port=13100
port_enable=YES
pasv_address=AWS-IP-Address
pasv_addr_resolve=no

保存并重启服务

$ sudo service vsftpd restart

请在安全组中开放以下端口:

  • 自定义 TCP 20,来自 0.0.0.0/0
  • 自定义 TCP 21,来自 0.0.0.0/0
  • 自定义 TCP 13000,来自 0.0.0.0/0
  • 自定义 TCP 13100,来自 0.0.0.0/0

如果您使用FileZilla FTP客户端连接时出现以下错误:

Error:  Connection timed out
Error:  Failed to retrieve directory listing

为了解决这个问题,您需要按以下步骤操作:
1. 打开Filezilla,进入编辑 -> 设置菜单 2. 点击连接 -> FTP: 选择主动模式 3. 点击连接 -> FTP -> 主动模式: 选择 "要求操作系统提供外部IP地址" 4. 点击连接 -> FTP -> 被动模式: 选择 "回退到主动模式",点击确定 5. 再次尝试连接FTP站点。

2

新网址:https://www.gosquared.com/blog/fix-ftp-passive-mode-problems-on-amazon-ec2-instances - Elon Zito

0

如果可能的话,您应该使用被动模式。正如我在Bucho链接的文章中所说,您只需要为PASV模式定义一个端口范围,并在EC2安全组中打开该范围。


0
如果在vsftpd.conf中有以下配置:
pasv_enable=YES
pasv_min_port=64000
pasv_max_port=64321

尝试打开防火墙:
# yum install -y epel-release
# yum install -y ufw
# sudo ufw allow from any to any proto tcp port 64000:64321

sudo iptables -A INPUT -p tcp –dport 64000:64321 -j ACCEPT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接