現在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にログオンできるように設定することができません。
これを機能させる方法に関するアイデアはありますか?
この質問は、基本的には 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)、-J
(ProxyJump
)オプションを使用できます
rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/
私は-A
(エージェント転送)を使用していますが、キーを使用しない場合はパスワード認証でも機能することに注意してください。もちろん、proxy
をB
とdest
の例では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/