从 Google Compute Engine 连接到 FTP 服务器时出现“我不会打开连接”

新手上路,请多包涵

我通过 ssh 连接到我的 Google Compute Engine 的虚拟机。并想从那里 ftp 到另一台服务器。它询问我的用户名和密码,我可以毫无问题地登录。但是当我做 lsget 时,我收到这个错误:

 500 I won't open a connection to 10.240.XX.XX (only to XX.XX.XX.XX)
ftp: bind: Address already in use

那 10.240.XX.XX 是我在 ifconfig 结果中看到的内部 IP 地址。

如何使用 FTP 从另一台服务器传输文件?系统:Debian7

原文由 Nur Pinar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 579
1 个回答

您正在使用 FTP 的主动模式连接到运行 Pure-FTPd 的服务器。在主动模式下,服务器必须连接回客户端才能打开数据传输连接(用于文件传输或目录列表)。为此,客户端在 PORT 命令中将其 IP 地址发送到 FTP 服务器。

如果 FTP 服务器在 GCE 专用网络之外,它显然无法连接回客户端机器,因为机器位于防火墙和 NAT 后面。

实际上,Pure-FTPd 明确检查 PORT 命令中的 IP 地址是否与 FTP 控制连接的客户端 IP 地址匹配。如果客户端在 GCE 网络中发送其内部 IP 地址,它将不匹配。如果在这种情况下,Pure-FTPd 服务器直接拒绝传输(甚至不尝试连接)并显示错误消息,您将获得:

我不会打开到…的连接(只到…)

(其中第一个 ... 是客户端在 PORT 命令中提供的IP地址【GCE私网内的本地地址),第二个 ... 是客户端的外部 [NATed] IP 地址,如服务器所知)。


即使客户端在 PORT 命令中报告了外部 [NATed] 地址,它仍然无法工作,因为连接尝试不会通过 NAT 和防火墙。

为此,存在被动FTP模式,即客户端连接到服务器以打开数据传输连接。实际上,现在没有人使用主动模式。

有关这些模式的详细信息,请参阅(我的文章) FTP 连接 模式。

所以,切换到被动模式。如何完成是特定于客户的。

  • 在最常见的 *nix ftp 命令行客户端中,使用 -p 命令行开关,尽管无论如何默认使用被动模式:

-p 使用被动模式进行数据传输。允许在防火墙阻止从外部世界连接回客户端计算机的环境中使用 ftp。要求 ftp 服务器支持 PASV 命令。由于使用 PORT 传输模式的安全问题,现在这是所有客户端(ftp 和 pftp)的默认设置。该标志仅出于兼容性目的而保留,不再起作用。

原文由 Martin Prikryl 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题