Я пытаюсь загрузить файл с 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
работает нормально. Дэниел Стенберг пишет , что
Это особенно сложно, если вы включаете FTPS (зашифрованный FTP), так как тогда новый номер порта невидим для промежуточных ящиков, таких как межсетевые экраны.
но он не предлагает никакого решения.
Как правильно исправить это для FTPS кроме просто «никогда не использовать EPSV для FTPS»?