我通过 ssh 连接到我的 Google Compute Engine 的 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
10.240.XX.XX 是我在
ifconfig
中看到的我的内部 IP 地址结果。
如何使用FTP从另一台服务器传输文件?
系统:Debian7
请您参考如下方法:
您正在使用 FTP 的主动模式连接到运行 Pure-FTPd 的服务器。在主动模式下,服务器必须重新连接到客户端以打开数据传输连接(用于文件传输或目录列表)。为此,客户端将其 IP 地址发送到 PORT
中的 FTP 服务器。命令。
如果 FTP 服务器在 GCE 专用网络之外,它显然无法连接回客户端机器,因为该机器位于防火墙和 NAT 之后。
实际上,Pure-FTPd 明确检查了 PORT
中的 IP 地址。命令匹配FTP控制连接的客户端IP地址。如果客户端在 GCE 网络内发送其内部 IP 地址,则它不会匹配。如果出现这种情况,Pure-FTPd 服务器会直接拒绝传输(甚至不尝试连接)并显示错误消息,您将得到:
I won't open a connection to ... (only to ...)
(其中第一个
...
是客户端在
PORT
命令中提供的 IP 地址 [GCE 专用网络中的本地地址),第二个
...
是客户端的外部 [NATed] IP 地址,如服务器所知)。
即使客户端报告了
PORT
中的外部 [NATed] 地址命令,它仍然不起作用,因为连接尝试不会通过 NAT 和防火墙。
为此,存在被动FTP模式,客户端连接到服务器打开数据传输连接。实际上,现在没有人使用主动模式。
见(我的文章) FTP connection modes有关模式的详细信息。
所以,切换到被动模式。这是如何完成的取决于客户。
ftp
命令行客户端,使用 -p
命令行开关,尽管默认情况下使用被动模式:
-p
Use passive mode for data transfers. Allows use of ftp in environments where a firewall prevents connections from the outside world back to the client machine. Requires that the ftp server sup- port the PASV command. This is the default now for all clients (ftp and pftp) due to security concerns using the PORT transfer mode. The flag is kept for compatibility only and has no effect anymore.
passive
命令。ftp.exe
客户端,因为它根本不支持被动模式。您必须安装第三方客户端。见 How to use passive FTP mode in Windows command prompt?