Итак, у меня сейчас интересная проблема. Я пытаюсь использовать curl (7.15.5 в CentOS) для получения файла с удаленного FTP-сервера. Наш клиент кое-что изменил на прошлых выходных, потому что в пятницу это сработало, а сейчас - нет.
Я могу использовать FTP с помощью клиента CLI и просто получить список каталогов, хотя мне нужно ввести «пассивный», чтобы выключить пассивный режим. Если я этого не сделаю, я получу
421 Service not available, remote server has closed connection
Passive mode refused. Turning off passive mode.
No control connection for command: Transport endpoint is not connected
ftp>
Хорошо. Очевидно, что пассивный режим нужно отключить. Я прочитал справочную страницу несколько раз и понимаю, что мне нужно использовать -P, чтобы указать «активный» режим, однако из документации кажется, что это откроет порт на клиентском (моем) компьютере для данных для поток в. Поскольку он находится за брандмауэром, это не сработает.
Это говорит мне, что я что-то неправильно понимаю, потому что клиент CLI работает в активном режиме.
Помогите мне serverfault-kenobi, ты моя единственная надежда.
Я понял!
Ключ является использовать -P
, но вы должны использовать "очевидный" выбор, поскольку вы не можете открыть другой порт и подключить его.
Процитируем документацию:
- заставить curl выбрать тот же IP-адрес, который уже используется для управляющего соединения
Итак, команда curl
curl -u username:password -P - -o output.file ftp://whatever/source.file
В -P -
была важной частью. По сути, он заставляет curl использовать единственное доступное соединение (командное соединение) для передачи данных.
Ура!
это ссылка на сайт очень хорошо объясняет Active vs Passive.
Для меня - чтобы он заработал - мне также пришлось добавить --disable-eprt
также:
curl --disable-eprt -u username:password -P - ftp://whatever/source.file