Получение "Я не буду открывать соединение" при подключении к FTP-серверу от Google Compute Engine

Я ssh'ed к моей вычислительной машине VM и хочу ftp на другой сервер оттуда. Он спросил мое имя пользователя и пароль, я мог войти без проблем. но когда я делаю ls или get, я получаю эту ошибку:

500 I won't open a connection to 10.240.XX.XX (only to XX.XX.XX.XX)
ftp: bind: Address already in use

То, что 10.240.XX.XX - мой внутренний IP-адрес, я увидел результат ifconfig.

Как перенести файлы с другого сервера с помощью FTP? Система: Debian7

Ответ 1

Вы используете активный режим FTP для подключения к серверу с Pure-FTPd. В активном режиме сервер должен подключиться к клиенту, чтобы открыть соединение для передачи данных (для передачи файлов или списка каталогов). Для этого клиент отправляет свой IP-адрес на FTP-сервер в команде PORT.

Если FTP-сервер находится вне частной сети GCE, он, очевидно, не может подключиться к клиентской машине, поскольку компьютер находится за брандмауэром и NAT.

И на самом деле Pure-FTPd явно проверяет, что IP-адрес в команде PORT соответствует IP-адресу клиента соединения FTP-управления. Он не будет соответствовать, если клиент отправит свой внутренний IP-адрес в сети GCE. Если этот случай, сервер Pure-FTPd отклоняет передачу напрямую (даже не пытаясь подключиться) к сообщению об ошибке, вы получаете:

Я не буду открывать соединение с... (только для...)

(где первый ... - это IP-адрес, предоставленный клиентом в команде PORT [локальный адрес в частной сети GCE), а второй ... - внешний [NATed] IP-адрес клиент, как известно серверу).


Даже если клиент сообщил внешний [NATed] адрес в команде PORT, он все равно не будет работать, поскольку попытка подключения не пройдет мимо NAT и брандмауэра.

По этой причине существует режим пассивного FTP, в котором клиент подключается к серверу, чтобы открыть соединение для передачи данных. Фактически, никто не использует активный режим в настоящее время.

Подробнее о режимах см. (моя статья) Способы подключения FTP.

Итак, переключитесь в пассивный режим. Как это делается, зависит от клиента.

  • В большинстве обычных * nix ftp клиентов командной строки используйте переключатель командной строки -p, хотя пассивный режим по умолчанию используется по умолчанию:

    -p Используйте пассивный режим для передачи данных. Позволяет использовать ftp в средах, где брандмауэр предотвращает        подключения внешнего мира к клиентской машине. Требуется, чтобы сервер ftp-сервера        порт команды PASV. Это значение по умолчанию для всех клиентов (ftp и pftp) из-за безопасности        с использованием режима передачи PORT. Флаг поддерживается только для совместимости и не действует        больше.

  • Некоторые клиенты также поддерживают команду passive.

Ответ 2

Включите свой FTP в пассивном режиме, если вы уже подключили, введите

ftp> passive
Passive mode on.

В настоящее время вы используете FTP в пассивном режиме.

Ответ 3

Если вы используете редактор PsPad, и у вас такая же проблема, попробуйте установить эту конфигурацию для своего подключения:

введите описание изображения здесь