GNU/Linux >> Linux の 問題 >  >> Linux

複数のホップを介して SSH トンネル経由でデータをコピーする

解決策 1:

最も簡単な方法は、scp 経由でコピーすることです。さらに、この構文は他のいくつかの提案とは異なり、実際に機能します。

簡単にするために、この構文に勝るものはありません。潜在的に複雑なパイプを考慮する手間をかけずに、再帰的にコピー、rsync、または好きなものを実行できます。この構文は直感的に明確であり、あなたをフォローし、cat を無駄に使用しないシステム管理者がより簡単にサポートできます。

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

scp man ページから:-3 2 つのリモート ホスト間のコピーは、ローカル ホストを介して転送されます。このオプションを使用しない場合、データは 2 つのリモート ホスト間で直接コピーされます。このオプションは進捗メーターを無効にすることに注意してください。

以下の例

  • ワークステーションの名前は MacBook-Pro です。
  • Dev Jump Box は devjumpserver という名前です
  • 開発アプリケーション サーバーの名前は devapplicationserver
    • .local という名前の LAN DNS ゾーンにあります
  • QA ジャンプ ボックスの名前は qajumpserver
  • QA Application Server の名前は qaapplicationserver
    • .local という名前の LAN DNZ ゾーンにあります
  • 670 GB の /etc/hosts ファイルのテスト コピーを実行します;-)
  • SSH 公開鍵認証が設定されていることを前提としています。



これは ~/.ssh/config ファイルで、ワークステーションから適切なジャンプ (要塞サーバーとも呼ばれます) を介してアプリケーション サーバーへの直接アクセスを設定します。

MacBook-Pro:~ barrychapman$ cat ~/.ssh/config
Host *
  ServerAliveInterval 60
Host devapplicationsever
  HostName devapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p
  User barrychapman
Host qaapplicationserver
  HostName qaapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p
  User barrychapman

MacBook-Pro:~ barrychapman$



ターゲット サーバー上のファイルの存在をテストしていますが、存在しません。

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
ls: cannot access /tmp/hosts: No such file or directory
Killed by signal 1.
MacBook-Pro:~ barrychapman$



では、ワークステーションを介して Dev Application サーバーから QA Application にファイルをコピーしましょう。

MacBook-Pro:~ barrychapman$ scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/
Killed by signal 1.
Killed by signal 1.
MacBook-Pro:~ barrychapman$



ここで、QA アプリケーション サーバーにコピーされたファイルが存在するかどうかを確認します。今回はそこにあります。

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
/tmp/hosts
Killed by signal 1.
MacBook-Pro:~ barrychapman$ 

注意

ProxyCommand 接続を閉じると、「Kill​​ed by signal 1」という警告メッセージが表示されます。これは ProxyCommand 接続を切断する SSH であり、心配する必要はありません。 LogLevel Quiet を追加することでそれを取り除くことができます 踏み台ホスト構成スタンザに追加します。

解決策 2:

パイプ!

インターネットが一連のチューブである場合、Unix は一連のパイプです -- 次のようなものです:

cat ginormous-file | ssh [email protected] "cat | ssh [email protected] \"cat >out\" "

動作するはずです。

より多くのホストをトラバースする必要がある場合は、パイプを追加します (および \ のネストされたレイヤーを追加します)。 -エスケープされた引用符) 必要に応じて。 (ただし、パイプライン/エスケープが非常に複雑になり、図を描くか、エスケープを2倍にする必要がある回数を決定するために指で数えることに頼る必要がある場合は、おそらく敗北を認めて適切なVPNをセットアップするときです. !)


Linux
  1. SSH を介してすべてのネットワーク トラフィックをトンネリングするにはどうすればよいですか?

  2. SOCKS 経由で HTTP over SSH をトンネリングする方法は?

  3. リバース (リモート) SSH トンネルを介した SSH 接続

  1. Sshpassの複数のコマンド?

  2. Sudoを介してSsh上でスクリプトファイルを実行しますか?

  3. Ssh –複数のホストを介したScp?

  1. Linux で SSH 経由で X アプリケーションを実行できない

  2. 1 つのコマンドで scp 経由で複数のファイルをコピーするにはどうすればよいですか?

  3. 大きなファイルを LAN 上の複数のマシンにコピーする