通过 SSH 下载文件,中间有一个“代理”机器

通过 SSH 下载文件,中间有一个“代理”机器

我需要将文件从机器 C 下载到机器 A。为此,我需要登录机器 B(我正在使用 执行此操作scp),因为我无法直接从 A 访问 C。

是否可以使用单个命令或脚本将文件从 C 下载到 A?

答案1

如果可以从机器B访问A和C,

新版本scp支持-3开关,允许您在两台远程计算机之间复制文件。

 -3      Copies between two remote hosts are transferred through the local host.  Without this option the data is copied directly between the two remote hosts.  Note that this option disables the
         progress meter.

$ scp -3 user1@C:/file user2@A:/file

答案2

如果您在所有机器上配置了 SSH 访问,则可以通过机器 B 设置 SSH 隧道。
第一步:

[user@A ~]$ ssh -f -L LOCALPORT:IP_ADDR_C:22 user_at_B@IP_ADDR_B

在命令执行之前将键-f置于后台。ssh使用-N钥匙的好主意。
man ssh

-N 不执行远程命令。这对于仅转发端口很有用(仅限协议版本 2)。

现在您可以使用scp

[user@A ~]$ scp -P LOCALPORT user_at_C@localhost:<your_file_at_C> <local_file>

例如,我们将从位于 machine 后面的计算机上的test.txt用户主目录下载文件:me192.168.1.1host.example.com

ssh -f -N -L 2222:192.168.1.1:22 [email protected]
scp -P 2222 me@localhost:~/test.txt .

答案3

有一个非常简单的方法可以做到这一点!

  1. 首先连接网关:

    ssh user@B
    
  2. 启动副本 C -> A

    ssh user@C "dd if=/path/source/file" | ssh user@A "dd of=/path/destination/file"
    

如果您想删除ddstderr 上写入的消息,请使用该选项(status=none如果您的版本dd支持此选项),或者使用2> /dev/null.

请注意,8.4 版本中存在一个错误,即使文档中存在该错误,也会dd导致该错误无法工作。status=none

答案4

您可以建立ssh从 B 到 C 的隧道,然后从 Ascp到 B 的端口,隧道用于下载文件。有很多信息页面,谷歌搜索,第一个搜索带了我这里

相关内容