間に「プロキシ」マシンを使用してSSH経由でファイルをダウンロードします。

間に「プロキシ」マシンを使用してSSH経由でファイルをダウンロードします。

コンピュータCからコンピュータAにファイルをダウンロードする必要があります。scpAからCに直接アクセスできないため、これを行うには、マシンB(このタスクを実行するために使用している)にログインする必要があります。

単一のコマンドまたはスクリプトを使用してCからAにファイルをダウンロードできますか?

答え1

A と C がマシン B からアクセス可能な場合、

新しいバージョンは、2台のリモートコンピュータ間でファイルをコピーできるスイッチをscpサポートしています。-3

 -3      Copies between two remote hosts are transferred through the local host.  Without this option the data is copied directly between the two remote hosts.  Note that this option disables the
         progress meter.

$ scp -3 user1@C:/file user2@A:/file

答え2

すべてのマシンでSSHアクセスを設定した場合は、マシンBを介してSSHトンネルを設定できます。
最初のステップ:

[user@A ~]$ ssh -f -L LOCALPORT:IP_ADDR_C:22 user_at_B@IP_ADDR_B

コマンドが実行される前にキーをバックグラウンドにしてください-f。鍵をssh使用することをお勧めします-N
からman ssh

-N リモートコマンドを実行しません。これはポートのみを転送するのに役立ちます(プロトコルバージョン2のみ)。

これで次のことができますscp

[user@A ~]$ scp -P LOCALPORT user_at_C@localhost:<your_file_at_C> <local_file>

たとえば、マシンの背後にあるマシンのユーザーホームディレクトリからファイルをダウンロードしますtest.txtme192.168.1.1host.example.com

ssh -f -N -L 2222:192.168.1.1:22 [email protected]
scp -P 2222 me@localhost:~/test.txt .

答え3

非常に簡単な方法があります!

  1. まずゲートウェイに接続します。

    ssh user@B
    
  2. コピー開始 C -> A

    ssh user@C "dd if=/path/source/file" | ssh user@A "dd of=/path/destination/file"
    

ddstderrで作成されたメッセージを削除するには、そのバージョンでサポートされているstatus=none場合ddは、このオプションを使用するか、2> /dev/null

8.4 バージョンには、ddドキュメントにあるにもかかわらず動作しないバグがあることに注意してください。status=none

答え4

sshBからCへのトンネルを設定し、AからBのポートにトンネルを設定すると、ファイルをダウンロードするためにscp使用されます。情報ページが多く、Google 検索が最初の検索につながりました。ここ

関連情報