这里有很多关于使用 rsync 与“代理”主机的很好的提示,但我发现的所有提示都假设到处都有 SSH 服务器。
我拥有的是:
- 主机 A - rsync 客户端、SSH 客户端 (Linux)、访问 B
- 主机 B - SSH 服务器 (Linux),访问 C
- 主机 C - rsync 服务器(它实际上是一台带有 Deltacopy 服务器的 Windows 机器)
rsync 命令应该如何理解才能打开与主机 B 的 SSH 连接以及与主机 C 的远程隧道,然后从主机 C 中获取文件?
(希望我能清楚地解释我需要什么)
答案1
我假设 C 上的 rsync(Deltacopy)服务器监听 TCP 端口 873,并且您可以从 B 访问它。如果是这样,这将成为从 A 访问 C 的 TCP 端口的一般问题,当 A 无法直接访问 C,但可以ssh
访问可以访问 C 的 B。
使用本地端口转发:
# on A
ssh -NL 8873:C_seen_from_B:873 userB@B_seen_from_A
这8873
是本地端口号,任意;ssh
将监听此端口。我没有使用,873
原因有二:
- 本地可能有一个 rsync 服务器已经占用了端口;
- 你很可能无论如何都不允许使用低于 1024 的端口。
现在如果您从 A 连接到,localhost:8873
那么您将到达 C 的端口 873。C 将看到来自 B 的流量。到目前为止,rsync 还没有任何特定内容。
接下来rsync
在 A 上调用,并且在命令中需要指定LOCATION
C 上的任何地方,使用语法rsync://[USER@]HOST[:PORT]/LOCATION
(请参阅“通过 rsync 守护程序访问”man 1 rsync
),其中HOST
是localhost
且PORT
是8873
。
例如,如果在 B 上你会使用rsync://C_seen_from_B:873/foo/bar
,那么现在在 A 上你应该使用rsync://localhost:8873/foo/bar
。
这样,rsync
A 上的服务器将连接到localhost:8873
A 上的ssh
监听服务器。连接将通过 SSH 隧道传输,B 上的 SSH 服务器将为C_seen_from_B:873
您连接。最终,rsync
A 上的调用将与 C 上运行的 rsync(Deltacopy)服务器进行通信。