两个遥控器之间的Rsync



我需要在到远程主机之间执行rsync(原因稍后说明),这是rsync不支持的(请参阅手册页)。但是,我认为应该可以使用ssh隧道。到目前为止,我无法让它发挥作用,我认为我做错了什么。看看下面的片段:

ssh -R localhost:50000:remotesource:22 user@localpc -f -N
sleep 5 #To wait for the tunnel to establish
ssh user@remotedestination rsync -e "ssh -p 50000" --progress --append-verify user@localpc:~/sourcefiles ~/destdir'

这基本上是在rsync内部ssh的身份验证过程中挂起的。为了测试它,我连接到remotedestination,并尝试通过隧道ssh到remotesource,结果成功了!rsync有什么不同的功能,我在这里忘记了吗?

我为什么要这么做?尽管大家都很好奇,但事实是,remotesource是一台我只能从中提取而不能推送数据的计算机,而remotedestination只有一个共享帐户。由于经常出现连接问题,我想写一个脚本来在出现错误时重新启动rsync。为此,我需要通过密钥文件进行身份验证(没有安装sshpass或类似的文件)。但我肯定不会将我的私钥存储在共享帐户的主目录中。因此,我希望通过我的本地电脑进行身份验证

我希望有人能指出我的错误,我看不出来:-)谢谢!

我想你在这里已经陷入了困境!

创建转发到端口22的端口唯一有帮助的时间是在防火墙周围进行路由时。它不会帮助您避免身份验证。在任何情况下,您的隧道只接受来自运行在"localpc"上的进程的连接,因此运行在"remotedestination"上的rsync无法使用它

如果你不想将凭据泄露到"remotedestination"上的共享帐户中,并且交互式密码输入是不可能的,那么事情就有点棘手了。您可以使用authorized_keys限制的密钥,但这仍然不是完全安全的。您可以使用ssh -A将ssh代理连接转发到"remotedestination",但具有相同用户访问权限的窃听者也可以使用该套接字(如果您实际上不是面对真正黑客的间谍,这种方法至少相当隐蔽)。

可能最安全的方法是从"远程源"启动传输,在该端使用ssh -A代理转发。

或者,如果数据不是很大,或者增量更新不是重点,您可以尝试scp。它可以处理远程源和目标,如果可以的话,甚至可以直接将数据从源移动到目标。缺点是它总是试图复制所有数据。

最新更新