远程机器:运行 Debian 10 的 VPS;vsftp 作为 ftp 服务器。
本地机器:一台 Fedora 30 台式机,位于我家的局域网内。本地路由器:一台 Technicolor AGHP,从我的电信供应商处租用。
我正在尝试通过以下方式下载 1.5G 远程目录(约 21,000 个项目)
wget -m -c -N -X -v --debug -o wgout.txt ftp://myuser:password@mydomain/html/wp/
下载开始正常,持续近 6/8 分钟,最多下载到 300MB,然后停止:
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.
之后,除非我重新启动路由器,否则我的 LAN 内的任何设备(Linux、Win 或 Android)都无法通过任何协议(http(s)、ssh、ftp)访问远程 IP。(从我的 LAN 外部始终可以访问远程站点。)
svftp.conf 包括
connect_from_port_20=YES
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=65535 (edited)
我甚至不确定问题在哪里:vsftp、路由器、本地机器。
ps. 有没有办法调用 openssh-sftp-server,例如:
wget **sftp**://myuser:password@mydomain/html/wp/
答案1
如果这是由于每个时间段的连接数过多造成的问题,那么您可能希望将其限制wget
在一定数量。不过,它似乎不提供该功能。但您可以使用它--limit-rate
来减慢整个传输速度。如果速度足够慢,问题可能会消失。
或者您可以更改下载方式,使其不会产生大量连接。一种方法是使用比 FTP 更好的东西,就像您使用 一样rsync
。您没有提到是否有充分的理由说明为什么您更喜欢 而wget
不是rsync
。
不幸的wget
是不支持 SFTP 但是curl
确实支持(并且可能比更接近你想要的)rsync
。
如果出于某种原因,您确实更喜欢wget
其他方法,那么您可以创建 SSH 隧道。没有端口转发(因为这对 FTP 没有帮助),但在两侧创建虚拟网络接口:
ssh -o 'Tunnel point-to-point' ...
wget
将连接到远程tun
IP 地址。对于其间的所有系统来说,这看起来就像一个长连接。您甚至可以轻松地以这种方式使用流量整形来防止这些传输影响其余系统。