リモートホストでrsyncを使用する方法

リモートホストでrsyncを使用する方法

私はこれを愛用しておりrsync -e ssh、自分のマシンとリモートホストの間でデータを同期するために使用しています。

rsync -avz -e ssh me@hostA:~/folder ~/folder

そして、これで今までのところ必要なことはできました。

現在、アクセスが少し複雑な構成で作業しています。~/folderが 上にあるとしますhostB。ただし、hostBマシンからは直接アクセスできず、 を介して間接的にのみアクセスできますhostA

したがって、 のフォルダーのみを表示したい場合は、hostBまず に ssh で接続しhostA、次に に接続する必要があります。その後、リモート ホスト上のhostBのファイルを表示できます。~/folder

rsync私の質問は、私のマシンと の間で直接使用する (最良の) 方法は何ですかhostB?

残念ながら、これは私が作業する必要がある構成です。データを一時的に保存する可能性はないものと想定しますhostA

答え1

見てSSHを使用して別のPC経由でPCに接続するにはどうすればいいですか

~/.ssh/configtunnelb という名前の新しいエントリを作成します。

Host tunnelb
HostName hostB
User user
ProxyCommand ssh user@hostA nc %h %p

sshの最新バージョンをお持ちの場合は、Proxycommand ssh user@hostA -W %h:%p代わりにこれを使用できます。これは、nc

rsync -e ssh tunnelb:~/folder ~/folderこれで、で定義されたエントリが使用されるので、を使用するだけで済みます~/.ssh/config

答え2

バリアント 1:

まず、別のターミナルでローカル ポート転送を使用して、hostA で ssh を永続的に開始します。例:

ssh -N -v -L 22022:hostB:22 hostA

次に、 に ssh で rsync を「フィード」しますlocalhost:22022。1 つの方法は、~/.ssh/config に書き込むことです。

Host hostB
HostName localhost
Port 22022

バリアント2:

を次の内容を含むスクリプトに-e ssh置き換えます。-e

ssh hostA 'ssh hostB' "$@"

試していないので、いくつかの詳細は追加で詳しく説明します。

関連情報