我想同步两台计算机(A 和 C)。不幸的是,我无法通过ssh从计算机A连接到计算机C(没有人知道为什么)。这就是为什么我必须使用另一台计算机(B),它被C识别。
为了同步 A 和 C,我构建了两个脚本:第一个"sync_A_2_B.sh"(位于 A 中)和"sync_B_2_C.sh"(位于 B 中)。其中每个都包含 rsync 指令。
从 A 到 B:
rsync -av ~/BACK_UP/ username1@blablabla1:/home/BACK_UP/
从 B 到 C:
rsync -av ~/BACK_UP/ username2@blablabla2:/home/BACK_UP/
这很完美,但有点耗时。这就引出了我的问题。是否可以在位于 A("sync_A_2_C.sh) 中的一个脚本中执行这些操作,以便程序认为 B 是桥接器?我已经绑定了以下内容,但它不起作用:
rsync -av ~/BACK_UP/ username1@blablabla1:/home/BACK_UP/
rsync -av username1@blablabla1:/home/BACK_UP/ username2@blablabla2:/home/BACK_UP/
但是,它不起作用,因为源和目标不能同时位于 remmote 桌面中。是否有可能轻松执行我想要的?我应该使用其他工具吗?
您可以使用 ProxyCommand 选项通过 SSH 转发通过 B 的流量。 这样做意味着文件根本不需要存在于计算机 B 上。 例如(从机器 A 到 C):
rsync -av -e 'ssh -o "ProxyCommand ssh -W %h:%p username1@B"' ~/BACK_UP/ username2@C:/home/BACK_UP/
或者你可以把 ProxyCommand 放在你的 ~/.ssh/config 文件中。 像这样:
Host C
Hostname C
User username2
ProxyCommand ssh -W %h:%p username1@B
有了这个,您应该能够透明地从A到C进行ssh