为什么我在运行命令后会被踢出 FTP 会话?似乎一旦我成功登录到服务器,在运行诸如“ls”之类的命令后会得到以下信息(我已将错误部分包含在“[ERROR]”标签中):
allen92@allen92-VirtualBox:~/Videos$ ftp -n ftp.FreeBSD.org
Connected to ftp.FreeBSD.org.
220 beastie.tdk.net FTP server (Version 6.00LS) ready.
ftp> user
(username) anonymous
331 Guest login ok, send your email address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
[ERROR]
421 Service not available, remote server has closed connection
[ERROR]
ftp>
Run Code Online (Sandbox Code Playgroud)
这似乎发生在任何远程 FTP 服务器上。当我登录到本地机器并运行 FTP 命令时,一切正常。如果实际上“421”错误是一个通用错误,有什么办法可以找出问题的根源?任何有关这方面的线索将不胜感激。我一直无法找到有关此特定内容的任何支持问题的。任何有类似问题的人,请分享您的想法。
注意:我安装了VSFTPD。
Tho*_*sen 13
您和显示该症状的服务器之间很可能存在 NAT 防火墙。(NAT 防火墙将整个网络隐藏在单个 IP 号码后面)。
问题是,FTP想要发送的命令在一个新的,产生的数据独立的TCP / IP连接,这是因为它需要从服务器去你不能通过防火墙,而你是隐藏其中有防火墙后面不知道该数据是为您的机器设计的。在设计 FTP 协议时,还没有发明许多现代设备,例如 NAT 路由器(当设备数量多于可用 IP 地址时就变得必要)。
使用该pasv
命令(在您的客户端中可能称为不同的名称)更改为被动连接,其中数据连接从您到服务器。
有关更详细的说明,请参阅http://slacksite.com/other/ftp.html。