我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
10.240.XX.XX是我在ifconfig
结果中看到的内部IP地址。
如何使用FTP从其他服务器传输文件? 系统:Debian7
答案 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)
答案 3 :(得分:0)
如果您在 Windows 10 中使用 wsl2 linux 子系统:使用 pftp