這聽起來像是一個問題,涉及到您的FTP連接是否處於PASSIVE
模式,以及連接的兩端是否都可以支持它。
的ftplib documentations表明,它是在默認情況下,這是一種恥辱,因爲我要建議你打開它。相反,我會建議你set_debuglevel
在那裏你可以看到發生了協議的較低水平,看看你現在的模式。這應該給你如何進行信息。要麼你處於被動模式,而另一端無法正確處理,或者(希望)你不會,但你應該這樣做。
可以配置FTP和FTPS(但不是SFTP),以便服務器與客戶端進行實際傳輸的後向連接,或者使客戶端與服務器進行第二次轉發連接以進行傳輸。前者,尤其是涉及到網絡地址轉換時容易出現複雜情況。如果沒有TLS,一些防火牆實際上可以重寫FTP會話流量,以使其神奇地工作,但由於加密,TLS是不可能的。
當您嘗試傳輸數據(LIST需要第二個連接在一個方向上或另一個方向上)時,大概認證然後超時的事實是典型的症狀,通常是需要被動模式的設置,或者,這是:
像平常一樣連接到端口21,在認證之前隱式保護* FTP控制連接。保護數據連接需要用戶通過調用prot_p()方法明確要求它。
ftps.prot_p() # switch to secure data connection
ftps.retrlines('LIST') # list directory content securely
我不FTPS工作的時候,因爲SFTP是少了這麼多問題,但如果你不這樣做,遠端服務器可能無法配合。
*注意,我懷疑這句話是想說,FTP_TLS「隱含保證FTP控制連接」,在對比與數據連接的明確固定。
難道是服務器阻止從ec2的連接?我調用了prot_p()和set_pasv('true')。我也成功地返回了歡迎消息。正如我所提到的,我能夠在本地列出文件 - 我set_debuglevel並觀看渲染 - ec2和本地產生相同的輸出。 –