我在主机操作系统 (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,它始终使用单个控制/数据连接和不应该有同样的问题。