サーバーからファイルを2歩先に取得する[終了]


14

次の状況があります。

  1. 私のマシン
  2. ゲートウェイマシン
  3. ターゲットマシン

#2と#3の両方にルート権限がありません。また、マシン#2に実際に情報を保存することはできません(200 MiB以下)(これはネットワークの残りの部分へのゲートウェイであるため、それ以上ではないため)。マシン#3には、ローカルにコピーしたいサイズが約3 GiBのフォルダーがあります。#1から#3にSSHで接続することはできませんが、#2に接続してから#3に接続することはできます。#2と#3の間にパブリックプライベートキーペアを設定することもできませんが、#1と#2の間にキーペアがインストールされています。

通常、これを行うにはSSHとtarの組み合わせを使用します。

ssh name@host "tar cf - folder" > folder.tar

しかし、この場合、何らかのネストが必要になります。これを完了することはできません。

それでは、#3から#1にデータを取得する良い方法は何でしょうか?

回答:


27

machine2を介してSSHトンネルを作成し、別のセッションでトンネルに接続できます。

たとえば、machine1で2つのCLIセッションを開きます。最初のセッションで次を実行します。

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

2番目のセッションで次を実行します。

MACHINE1 $ ssh -p 2022 <user>@localhost

最初のコマンドで発生しているのは、machine2へのSSH接続を使用して、machine3のポート22にトンネル化されているローカルポート(machine1の2022)です。

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を得ることではないと仮定します。


2
ProxyCommandssh -W2つのsshコマンドを使用して、1つのコマンドラインにまとめることができます。OpenSSHクライアントの最新バージョンを使用している場合、1つのsshコマンドですべてを実行できる引数があります。
カスペルド

rsyncの+1;)
NieDzejkob

tarを使用する理由は、1つの大きなファイルを転送するよりも多くのファイルを転送するのに時間がかかるからです。rsyncはこれを解決しますか?
Cheiron

リモート転送を行う場合、rsyncは転送中のデータ(受信側でディスクに書き込む前)をチェックサムするため、ファイルの転送に時間がかかります。しかし、それは十分に費やされた時間です。
遺伝子

5

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できるようになります。このようにチェーンされたサーバーがさらに存在する可能性があります。


3
あなたのリンクを読んだControlMasterことから、プロキシを行うために多重化/ が必要だとは思わない。そのwikibookでより多くの関連ページは、このいずれかになります。en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
IMSoP

はい私は同意する。複数の方法があります。ただし、マスターセッションは最もエレガントであると考えています。個人的な好みについてだけです;-)
ヤロスラフクセラ

私たちの誰かが何かを誤解していた。私の知る限り、「マスター接続」とはネットワークリソースを効率的に使用することであり、質問とは関係ありません。それは別の方法ではありません、それは単に目の前のタスクとは無関係です。
IMSoP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.