如何使用rsync在基于localhost服务器的2个远程服务器之间复制文件?

如何使用rsync在基于localhost服务器的2个远程服务器之间复制文件?

我有一个情况,当我需要从旧服务器移动数据时:主机1到新服务器:主机2问题是host1看不到host2,但我可以使用另一台服务器(本地主机)通过 SSH 连接到主机 1 和主机 2。

想象一下它应该像这样工作:主机1->本地主机->主机2

如何使用 rsync 在 host1 和 host2 之间复制文件?我在本地主机服务器上尝试了这个命令,但它说源和目标不能同时位于远程。

 rsync -avz host1:/workspace host2:/rasv1/old_code-de

答案1

我最终得到了解决方案https://unix.stackexchange.com/users/312074/eblock

scp -3 host1 host2

答案2

您可以使用隧道通过 ssh 重定向 rsync。

开始以 user@host1 身份登录,并通过“localhost”创建到 host2 的隧道(我们将其称为“your_host”以避免混淆):

ssh <your_host_user>@<your_host> -L 8080:<host2_ip>:22

保持该终端打开,然后在 host1 的另一个终端上键入:

rsync -avzh -e "ssh -p 8080" <source_file> <host2_user>@127.0.0.1:/<target_folder>

当然你可以使用任何其他端口来代替8080。至于使用其他不涉及ssh的方法,我认为是可能的,但我没有测试。

答案3

据我所知,rsync 不支持从远程服务器复制到远程服务器。

如果您只需要简单的文件复制,您可以使用scp@eblock-3指出的选项

 

如果您需要 rsync,您可以使用以下命令将两台服务器安装到本地文件夹sshfs

sshfs user@server1:/path/on/server1 /local/path1
sshfs user@server2:/path/on/server2 /local/path2

然后在本地文件夹之间复制文件:

rsync -av /local/path1 /local/path2

卸载:

fusermount -u /local/path1
fusermount -u /local/path2

虽然我不确定 的速度/性能sshfs

相关内容