![如何使用 rsync 与远程主机](https://linux22.com/image/23906/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20rsync%20%E4%B8%8E%E8%BF%9C%E7%A8%8B%E4%B8%BB%E6%9C%BA.png)
我是一个快乐的用户,rsync -e ssh
并使用它来同步我的机器和远程主机之间的数据
rsync -avz -e ssh me@hostA:~/folder ~/folder
这满足了我到目前为止所需要的。
我现在正在使用访问稍微复杂一些的配置。假设 now~/folder
已打开hostB
,但hostB
不能从我的机器直接访问,而只能通过 间接访问hostA
。
因此,如果我只想查看hostB
.我首先需要 ssh 到hostA
,然后才能在远程主机上hostB
看到我的文件。~/folder
rsync
我现在的问题是,在我的机器和 之间直接使用的(最佳)方法是什么hostB
?
不幸的是,这是我需要使用的配置。假设不可能临时存储数据hostA
本身。
答案1
您创建一个~/.ssh/config
名为tunnelb的新条目:
Host tunnelb
HostName hostB
User user
ProxyCommand ssh user@hostA nc %h %p
如果您有最新版本的 ssh,Proxycommand ssh user@hostA -W %h:%p
则可以使用它。这是首选,因为它不依赖于nc
现在您可以直接使用,rsync -e ssh tunnelb:~/folder ~/folder
因为它将使用 中定义的条目~/.ssh/config
。
答案2
变体 1:
首先,在 hostA 上永久启动 ssh,并在另一个终端中进行本地端口转发。例如:
ssh -N -v -L 22022:hostB:22 hostA
然后,使用 ssh 将 rsync“馈送”至localhost:22022
.一种变体是写入 ~/.ssh/config:
Host hostB
HostName localhost
Port 22022
变体 2:
替换-e ssh
为-e
某个包含以下内容的脚本:
ssh hostA 'ssh hostB' "$@"
我没有尝试过,所以一些细节将另外详细说明。