LINUX的SSH下FTP到远程服务器Entering Passive Mode失败解决
LINUX 系统FTP连接远程服务器经常出现在传输文件或者发出 ls命令时候出现 “Entering Passive Mode ”然后就再也无法运作了。该工作主要是因为LINUX的SSH里 FTP连接默认使用了被动命令,而被动命令会在连接过程不断变换端口,该端口也许会被客户端也许会被服务器端的防火墙拦截了。就会造成等待或者拒绝的情况。因此在进行传输的时候不妨进行2种尝试,以找到解决方法。我的FTP服务器端设置了防火墙,SSH请求端也设置了防火墙。解决办法就是采用主动模式。
解决这个问题就是使用命令关闭掉被动模式。
ftp> passive
Passive mode off.
执行该命令会自动选择,如果已经在ON状态则转成OFF状态,如果是OFF状态则转成ON状态。
-------------------
FTP、防火墙和被动模式
前面我们讲过,FTP协议的数据传输存在两种模式:主动模式和被动模式。这两种模式发起连接的方向截然相反,主动模式是从服务器端向客户端发起;被动模式是客户端向服务器端发起连接。但是如果服务器和客户之间存在防火墙,主动模式经常会引起一些麻烦。设想,客户位于防火墙之后,防火墙允许所有内部向外部的连接通过,但是对于外部向内部发起的连接却存在很多限制。在这种情况下,客户可以正常地和服务器建立控制连接,而如果使用主动模式,ls、put和get等数据传输命令就很难成功运行,因为防火墙会阻塞从服务器向客户发起的数据传输连接。简单包过滤防火墙把控制连接和数据传输连接完全分离开了,因此很难通过配置防火墙允许主动模式的FTP数据传输连接通过。如果防火墙允许ICMP或者TCP
RST报文通过,客户程序就会马上返回connection refused错误信息;而如果防火墙只是做简单的丢弃处理,会造成客户程序挂起一段时间。
被动模式一般可以解决此类问题,因为在被动模式下,连接是由客户端发起的饿。不过,这要看FTP服务器和客户程序是否支持被动模式。命令行FTP客户程序一般使用passive命令关/开被动模式。例如:
ftp>passive
Passive mode off
ftp>passive
Passive mode on
如果客户程序不支持被动模式,它就会返回?Invaild command;如果客户程序支持被动模式,而服务器不支持,就会返回"PASV:command not understood",PASV是一个FTP协议命令,使服务器进入到被动模式。
-----------------------
因此如果服务器FTP一段时间正常后,突然不能连接,则可以通过以上设置后调整。或者出现无法连接进行文本传输、列表等。可以尝试切换看看