通过中间主机的Rsync文件


22

我目前不在局域网内,需要备份笔记本电脑。我的服务器上有笔记本电脑的最新副本,通常使用rsync备份笔记本电脑。现在,我希望这样做,但是要在局域网之外。

简而言之,我想通过B将数据从A发送到C,其中A是我的笔记本电脑,B是路由器,C是服务器。

我找到了以下命令:A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination,可以很好地通过scp传输文件-但由于我的服务器上已经拥有大部分数据,因此我希望使用rsync仅同步增量。

我已经尝试过:A$ rsync file -e 'ssh B ssh' C,并且在提示输入用户C的密码时,该方法仍然有效。但是,当我输入密码时,什么也没有发生。路由器正在运行Tomato v1.28,我无法对其进行设置以使用ssh配置文件来使其登录C w / oa密码。

关于如何进行这项工作的任何想法?


2
ProxyCommand在配置文件中使用相同的名称。Rsync应该接管。
雅库耶

Answers:


30

从本质上讲,这个问题是在其他地方回答的,包括此处的scp此处的rsync。由于后者包括我的答案,但是没有答案被接受,因此我将在此重复。

如前所述,您可以使用rsync-e | --rsh选项,但会变得更加复杂:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

或者,如果您的版本ssh足够新(OpenSSH> = v7.3),则可以使用-JProxyJump)选项

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

请注意,我使用-A(代理转发),但它也应该具有密码验证的工作,如果你不使用钥匙,当然,你可以替换proxy使用B,并destC在你的榜样。

如果偶然您没有足够新的ssh版本(> = 5.3,IIRC),则可以使用netcat代替-W选项ssh

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

最后,正如已经在注释中指出的那样,您可以将ProxyCommand放到$HOME/.ssh/config文件中,这样就不必具有如此复杂的命令行。具体来说,添加如下内容:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

或者,ProxyJump用于OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

然后,您应该能够执行以下操作:

rsync -azv foo/ C:./foo/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.