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

时间:2015-02-18 09:36:36

标签: ftp connection debian google-compute-engine

我ssh'ed到我的计算引擎的VM,并希望从那里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

4 个答案:

答案 0 :(得分:56)

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

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

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

  

我无法打开与...的连接(仅限于...)

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


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

出于这个原因,存在被动FTP模式,其中客户端连接到服务器以打开数据传输连接。实际上,现在没有人使用主动模式。

有关模式的详细信息,请参阅(我的文章)FTP connection modes

因此,切换到被动模式。如何做到这一点是客户特定的。

  • 在大多数常见的* nix ftp命令行客户端中,使用-p命令行开关,但默认情况下默认使用被动模式:

      

    -p使用被动模式进行数据传输。允许在防火墙阻止的环境中使用ftp          从外部世界到客户端机器的连接。要求ftp服务器支持          移植PASV命令。由于安全性,这是所有客户端(ftp和pftp)的默认设置          关注使用PORT传输模式。该标志仅用于兼容性且无效          了。

  • 有些客户还支持passive命令。

答案 1 :(得分:24)

启用被动模式的FTP,如果已经连接,请输入

ftp> passive
Passive mode on.

您目前正在被动模式下使用FTP。

答案 2 :(得分:2)

如果您使用PsPad编辑器并且遇到同样的问题,请尝试为您的连接设置此配置:

enter image description here

答案 3 :(得分:0)

如果您在 Windows 10 中使用 wsl2 linux 子系统:使用 pftp