私はこれを愛用しており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/config
tunnelb という名前の新しいエントリを作成します。
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' "$@"
試していないので、いくつかの詳細は追加で詳しく説明します。