如何通过两个中间服务器 scp 到第三跳服务器

SYA*_*iDE 5 scp

我已经看到了很多scp通过ProxyCommand操作员通过中间服务器到第二跳服务器的示例,例如:

A:/infile.txt -> B -> C:/outfile.txt
Run Code Online (Sandbox Code Playgroud)

从 A 中看起来类似于以下内容:

scp -o 'ProxyCommand ssh userB@hostB nc %h %p' infile.txt userC@hostC:"~/outfile.txt"
Run Code Online (Sandbox Code Playgroud)

我的问题是如何scp通过两个中间服务器到第三跳服务器,以便:

A:/infile.txt -> B -> C -> D:/outfile.txt
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种使用类似于上面提供的第二跳示例的单行来执行此操作的方法……但是如果不可能,所有答案和方法都是有效的。

我想要做的与通过多个主机或其变体的SCP 不同,它使用 /etc/ssh/ssh_config 文件来设置别名。这不是我想要做的,我正在寻找单线。我也没有看到任何在起点和目的地之间有两个或更多代理主机的例子,所以我相信这个问题是非常有效的。

Jak*_*uje 10

新的openssh7.3 提供了-J允许您创建所需单行的开关:

scp -oProxyJump=userB@hostB,userC@hostC infile.txt userD@hostD:"~/outfile.txt"
Run Code Online (Sandbox Code Playgroud)

手册页

代理跳转

一个或多个跳转代理指定为[user@]host[:port]. 多个代理可以用逗号分隔,并按顺序访问。设置此选项将导致 ssh(1) 连接到目标主机,方法是首先与指定的 ProxyJump 主机建立 ssh(1) 连接,然后从那里建立到最终目标的 TCP 转发。