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

Nur*_*nar 26 ftp connection debian google-compute-engine

我ssh'ed到我的计算引擎的VM,并希望从那里ftp到另一台服务器.它询问了我的用户名和密码,我可以毫无问题地登录.但是当我做ls或者get,我收到此错误:

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

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

如何使用FTP从其他服务器传输文件?系统:Debian7

Mar*_*ryl 58

您正在使用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)的默认设置.该标志仅用于兼容性,不再有效.

  • 有些客户也支持passive命令.

  • 只是添加,命令是`ftp -p SERVER` (4认同)
  • 这也是我的问题;显然,并非所有 Linux ftp 客户端默认都使用被动模式。 (3认同)
  • 请注意Windows上遇到此问题的任何人(我意识到这个问题不是关于Windows,但是我和我来到这里是因为搜索"_我不会打开连接到"):根据[如何使用被动FTP在Windows命令提示符下的模式?](/sf/ask/1305047971/)及其答案,Windows的_native_ FTP客户端(甚至最多10个)不支持被动模式,因此需要替代方案(回答这个问题提到WinSCP). (2认同)

小智 26

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

ftp> passive
Passive mode on.
Run Code Online (Sandbox Code Playgroud)

您当前正在被动模式下使用FTP.

  • 注意 - 被动是一个布尔值,它将在 ftp 中在被动模式和主动模式之间切换。对于以前没有切换过模式的人来说,这可能会让人感到困惑。 (3认同)