通过 FTPS 连接时,EPSV 模式在 curl 中总是失败

EPSV mode always fails in curl when connecting over FTPS

我正在尝试使用 curl 将文件上传到同时支持 FTP 和 FTPS 的网络服务器。

curl -vvv --ftp-ssl-reqd --user "username:password" ftp://ftps.website.com -T /path/to/a/file

此命令需要很长时间,因为 curl 首先尝试使用 EPSV 代码,然后根据日志

失败
> EPSV
* Connect data stream passively
* ftp_perform ends with SECONDARY: 0
< 229 Entering Extended Passive Mode (|||50107|)
*   Trying 123.456.789.123...
* TCP_NODELAY set
* Connecting to 123.456.789.123 (123.456.789.123) port 50107
* Connection failed
* connect to 123.456.789.123 port 21 failed: Operation timed out
* Failed to connect to ftps.website.com port 21: Operation timed out
* Failed EPSV attempt. Disabling EPSV
> PASV

禁用 EPSV 后,使用普通 PASV 模式传输成功。

通过普通的、未加密的 FTP 连接到同一个网络服务器并使用 EPSV 工作正常。丹尼尔·斯坦伯格 writes

This is particularly complicated if you enable FTPS (encrypted FTP) as then the new port number is invisible to middle-boxes such as firewalls.

但他没有提供任何解决方案。

如何正确修复 FTPS 除了 只是“从不为 FTPS 使用 EPSV”?

只使用 --disable-epsv 怎么样?引用我的话并不是说 EPSV 比 PASV 更复杂。由于上述原因,在 FTPS 情况下,两者都同样复杂。

EPSV 通常完全没有问题。该命令在 FTPS 上与在 FTP 上一样正常工作。您的问题是由于您的特定服务器和周围的网络