次の状況があります。
#2と#3の両方にroot権限がありません。また、マシン#2に情報(200 MiB以下)を実際に保存することもできません(それがネットワークの残りの部分へのゲートウェイになることを目的としているため、それ以上ではありません)。マシン#3には、約3 GiBサイズのフォルダーがあります。これをローカルにコピーします。#1から#3にSSHで接続できませんが、#2にSSHで接続できます。 #2と#3の間に公開秘密鍵ペアを設定することもできませんが、#1と#2の間に鍵ペアがインストールされています。
通常、私はSSHとtarの組み合わせを使用してこれを実行します。
ssh name@Host "tar cf - folder" > folder.tar
しかし、この場合は、なんらかのネストが必要になるため、これを行うことができないようです。
それでは、データを#3から#1に取得するための良い方法は何でしょうか?
Machine2を介してSSHトンネルを作成し、別のセッションでトンネルに接続できます。
たとえば、machine1で2つのCLIセッションを開きます。最初のセッションで、次を実行します。
MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2
2番目のセッションで、次を実行します。
MACHINE1 $ ssh -p 2022 <user>@localhost
最初のコマンドで起こっていることは、ローカルポート(machine1の2022)がmachine2へのSSH接続を使用してmachine3のポート22にトンネルされていることです。
2番目のコマンドでは、新しく開いたローカルポート(2022)に接続しており、machine3に直接接続しているようです。
通常のファイル転送プロセスを使用する場合は、次のようにします。
ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar
または、rsyncに慣れ、代わりに次のようなことを行うことができます。
rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/
最終目標はtarballを取得することではないと想定しています。
新しいバージョンのSSHのマスターセッション機能を使用することもできます。ここで説明されています:
https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing
おそらく、必要なのは.ssh/configを編集/作成することだけです。マスターセッションを制御する定義を追加します。
ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30
次に、次のような最初のホップサーバー定義を指定できます。
Host first_hop
Hostname <your first Host FQDN or IP>
User <your user>
そして、2番目のホップは最初のホップサーバーをプロキシとして使用します。
Host second_hop
Hostname <your second Host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop
〜/ .ssh/cm_socketディレクトリを作成することを忘れないでください。設定権限は644にする必要があります。
次に、2番目のサーバーとの間で直接SSHまたはSCPを実行できます。このようにチェーンされたサーバーがさらに存在する可能性があります。