这里有很多关于将 rsync 与“代理”主机一起使用的好技巧,但我发现的所有内容都假设到处都有 SSH 服务器。
我所拥有的是:
- 主机 A - rsync 客户端、SSH 客户端 (Linux)、访问 B
- 主机 B - SSH 服务器 (Linux),访问 C
- 主机 C - rsync 服务器(它实际上是一台带有 Deltacopy 服务器的 Windows 机器)
rsync 命令应该如何看待,以便它打开到主机 B 的 SSH 连接和到主机 C 的远程隧道,从中获取文件?
(希望我能清楚地解释我需要什么)
我假设 C 上的 rsync (Deltacopy) 服务器在 TCP 端口 873 上进行侦听,并且您可以从 B 访问它。如果是这样,这将成为从 A 到达 C 的 TCP 端口的一般问题,当 A 无法直接到达 C 时,但是可以
ssh
到可以到达C的B。使用本地端口转发:
这里
8873
是本地端口号,相当随意;ssh
将侦听此端口。我没有使用873
有两个原因:现在,如果您从 A 连接到
localhost:8873
然后,您将到达 C 的端口 873。C 将看到来自 B 的流量。到目前为止,没有任何特定于 rsync 的内容。接下来调用
rsync
A 以及在命令中需要LOCATION
在 C 上指定 a 的任何位置,使用语法rsync://[USER@]HOST[:PORT]/LOCATION
(请参阅“通过 rsync daemon 访问”man 1 rsync
),其中HOST
islocalhost
和PORT
is8873
。例如,如果在 B 上你会使用
rsync://C_seen_from_B:873/foo/bar
,现在在 A 上你应该使用rsync://localhost:8873/foo/bar
。A上的这种方式
rsync
将连接到监听localhost:8873
的A。ssh
连接将通过 SSH 建立隧道,B 上的 SSH 服务器将为C_seen_from_B:873
您连接。最终,rsync
在 A 上调用的将与在 C 上运行的 rsync (Deltacopy) 服务器通信。