コンピュータCからコンピュータAにファイルをダウンロードする必要があります。scp
Aから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.txt
。me
192.168.1.1
host.example.com
ssh -f -N -L 2222:192.168.1.1:22 [email protected]
scp -P 2222 me@localhost:~/test.txt .
答え3
非常に簡単な方法があります!
まずゲートウェイに接続します。
ssh user@B
コピー開始 C -> A
ssh user@C "dd if=/path/source/file" | ssh user@A "dd of=/path/destination/file"
dd
stderrで作成されたメッセージを削除するには、そのバージョンでサポートされているstatus=none
場合dd
は、このオプションを使用するか、2> /dev/null
。
8.4 バージョンには、dd
ドキュメントにあるにもかかわらず動作しないバグがあることに注意してください。status=none
答え4
ssh
BからCへのトンネルを設定し、AからBのポートにトンネルを設定すると、ファイルをダウンロードするためにscp
使用されます。情報ページが多く、Google 検索が最初の検索につながりました。ここ。