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一段時間正常后,突然不能連接,則可以通過以上設置后調整。或者出現無法連接進行文本傳輸、列表等。可以嘗試切換看看