主机操作系统和客户机操作系统之间的 FTP LIST 命令失败

主机操作系统和客户机操作系统之间的 FTP LIST 命令失败

我在主机操作系统 (Windows 7) 和客户操作系统 (Ubuntu 10.04) 之间设置 FTP 时遇到了麻烦。我使用 VirtualBox 中的网络设置在 80、21 和 22 上设置端口转发。在端口 80 上访问 Web 服务器很顺利,但在端口 21 上的 FTP 和 22 上的 SFTP 上遇到了一些问题。

这是我尝试在 FileZilla 中连接端口 21 时的输出:

状态:连接到 127.0.0.1:21...
状态:连接已建立,正在等待欢迎消息……
响应:220(vsFTPd 2.2.2)
命令:USER menuplus
响应:331 请指定密码。
命令:PASS *****
响应:230 登录成功。
状态:已连接
状态:正在检索目录列表...
命令:PWD
响应:257“/srv/www/vhosts/mp”
命令:TYPE I
响应:200 切换到二进制模式。
命令:PASV
响应:227 进入被动模式 (10,0,2,15,205,164)。
命令:LIST
错误:连接超时
错误:无法检索目录列表

连接已建立,但 LIST 命令失败,这使我认为也许客户操作系统上的权限设置错误,但 FTP 用户对其主目录有完全访问权限。

可能出了什么问题?

答案1

Command:    PASV
Response:   227 Entering Passive Mode (10,0,2,15,205,164).
Command:    LIST
Error:  Connection timed out

错误消息是“连接超时”,如您所见。如果存在权限问题,LIST 将立即失败,并收到来自远程端的“访问被拒绝”或“权限被拒绝”响应。

FTP 无法与 NAT 很好地协同工作。它使用单独的控制和数据连接 - 每次需要数据连接时,FTP 客户端都必须连接到服务器的 PASV 结果提供的地址。在这种情况下,您的服务器会告诉客户端连接到 10.0.2.15 以获取 LIST 输出 - 由于您的虚拟机位于 VirtualBox NAT 后面,因此这不起作用。(更高级的 NAT 实现,例如家用路由器中的实现,会“调整”FTP 流量以解决此问题。)

您可以选择使用 VirtualBox “桥接” 网络,这将使您的虚拟机成为真实网络的一部分,或者使用 SFTP,它始终使用单个控制/数据连接和不应该有同样的问题。

相关内容