Удаленная машина: VPS под управлением Debian 10; vsftp в качестве ftp-сервера.
Локальный компьютер: рабочий стол Fedora 30 в моей домашней локальной сети. Локальный маршрутизатор: Technicolor AGHP, взятый в аренду у моего оператора связи.
Я пытаюсь загрузить удаленный каталог 1,5 ГБ (~ 21 000 элементов) с помощью
wget -m -c -N -X -v --debug -o wgout.txt ftp://myuser:password@mydomain/html/wp/
Загрузка начинается нормально и продолжается почти 6-8 минут, до ~ 300 МБ, затем останавливается:
250 Directory successfully changed.
done.
conaddr is: ip.ip.ip.ip
==> PASV ...
--> PASV
227 Entering Passive Mode (ip,ip,ip,ip,234,149).
trying to connect to ip.ip.ip.ip port 60053
Closed fd 4
Closed fd 3
couldn't connect to ip.ip.ip.ip port 60053: Connection timed out
Retrying.
--2020-05-30 21:59:23-- ftp://myuser:*password*@mydomain/html/wp/wp-content/uploads/sites/3/2018/03/
(try: 2) => ‘mydomain/html/wp/wp-content/uploads/sites/3/2018/03/.listing’
Found mydomain in host_name_addresses_map (0x55ccb875e0e0)
Connecting to mydomain (mydomain)|ip.ip.ip.ip|:21... Closed fd 3
failed: Connection timed out.
Releasing 0x00......0e0 (new refcount 1).
Releasing 0x00......0e0 (new refcount 0).
Deleting unused 0x000055ccb875e0e0.
Resolving mydomain (mydomain)... ip.ip.ip.ip
Caching mydomain => ip.ip.ip.ip
Connecting to mydomain (mydomain)|ip.ip.ip.ip|:21... Closed fd 3
failed: Connection timed out.
Releasing 0x00......10 (new refcount 1).
Retrying.
После этого удаленный IP-адрес недоступен с любого устройства в моей локальной сети (Linux, Win или Android) по любому протоколу (http (s), ssh, ftp), если я не перезагружу маршрутизатор. (удаленный сайт всегда доступен из-за пределов моей локальной сети.)
svftp.conf включает
connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=65535 (edited)
Я даже не уверен, где найти проблему: vsftp, маршрутизатор, локальный компьютер.
пс. есть ли способ вызвать openssh-sftp-server, то есть что-то вроде:
wget **sftp**://myuser:password@mydomain/html/wp/
Если это проблема слишком большого количества подключений за период времени, вы можете ограничить wget
на определенную сумму. Однако, похоже, он не предлагает этой функции. Но вы могли бы использовать --limit-rate
чтобы замедлить передачу в целом. Если он будет достаточно медленным, проблема может исчезнуть.
Или вы изменяете загрузку так, чтобы она не создавала большого количества подключений. Один из способов - использовать что-то лучше FTP, как вы это делали с rsync
. Вы не указали, есть ли веские причины, по которым вы предпочитаете wget
над rsync
.
К сожалению wget
не поддерживает SFTP, но curl
делает (и может быть ближе к тому, что вы хотите, чем rsync
.
Если по какой-то причине вы действительно предпочитаете wget
поверх чего-либо еще, вы можете создать туннель SSH. Без переадресации портов (так как это не поможет с FTP), но создание виртуальных сетевых интерфейсов с обеих сторон:
ssh -o 'Tunnel point-to-point' ...
wget
подключится к удаленному tun
Айпи адрес. Для всех промежуточных систем это будет выглядеть как одно длинное соединение. Вы даже можете легко использовать формирование трафика таким образом, чтобы такие передачи не влияли на остальные системы.