通过中间跳转服务器传输 ftp 文件

通过中间跳转服务器传输 ftp 文件

在我的公司,我们通过跳转服务器访问远程电子设备。当我们需要从设备下载文件时,我们会执行以下操作:

  1. ssh jump.server.com
  2. wget ftp//device_ip/filepath(将文件下载到跳转服务器)
  3. 从本地机器 scp 跳转服务器来获取文件。

我尝试使用 ssh 端口转发来简化此过程,以便能够将文件直接从远程设备下载到我们的机器。我遵循这个答案

ssh -L 9000:device_ip:21 jump.server.com
wget ftp://localhost:9000/filepath

但我收到以下错误:

227 Entering Passive Mode (10,192,1,16,19,129).
trying to connect to 10.192.1.16 port 4993
Closed fd 4
Closed fd 3
couldn't connect to ipaddress port 4993: Connection timed out
Giving up.

问题不在于 wget 使用的被动模式,因为它在使用旧方法时可以工作。

有什么建议可以解释问题的原因吗?我们的电脑运行的是 Ubuntu,希望这能有所帮助。

答案1

FTP 使用端口 21 进行控制连接,但实际数据传输需要使用不同的、动态商定的端口进行额外的连接。这使得无法简单地通过单个 TCP 连接隧道传输 FTP,无论是主动模式还是被动模式。

如果您的 FTP 客户端支持 SOCKS 协议,您可以尝试使用该-D选项将 ssh 设置为 SOCKS 服务器,然后将其与 FTP 被动模式一起使用。

另一种选择是不登录、获取文件并将其传回,而是一次性完成所有操作:

$ ssh user@remote wget -O - ftp://host/file > file

相关内容