web-dev-qa-db-ja.com

中間ホストを介したRsyncファイル

現在LANから離れており、ラップトップのバックアップを作成する必要があります。私のサーバーには少し最近のラップトップのコピーがあり、通常はrsyncを使用してラップトップをバックアップします。今、私はそれをしたいのですが、私のLANの外にいます。

つまり、AからCにB経由でデータを送信します。Aはラップトップ、Bはルーター、Cはサーバーです。

私はこのコマンドを見つけました:A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination、それはscpを介してファイルを転送するのにうまく機能しますが、サーバーにほとんどのデータが既にあるので、rsyncを使用してデルタのみを同期したいと思います。

私が試してみました: A$ rsync file -e 'ssh B ssh' C、そしてuser:Cのパスワードを入力するように求められている限り、これは機能します。しかし、パスワードを入力しても何も起こりません。ルーターはTomato v1.28を実行しており、ssh設定ファイルを利用してパスワードなしでCにログオンできるように設定することができません。

これを機能させる方法に関するアイデアはありますか?

25
GLaDER

この質問は、基本的には here for scp および here for 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(エージェント転送)を使用していますが、キーを使用しない場合はパスワード認証でも機能することに注意してください。もちろん、proxyBdestの例ではCを使用しています。

たまたま新しいsshバージョン(> = 5.3、IIRC)がない場合は、-Wオプションの代わりにnetcatを使用して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

または、OpenSSH> = v 7.3の場合はProxyJumpを使用します。

Host C
  ProxyJump PROXYHOST

その後、あなたはただ行うことができるはずです:

rsync -azv foo/ C:./foo/
35
crimson-egret