アメリカにサーバー(LinuxボックスB)と自宅のPC(LinuxボックスA)があり、ウェブサイトCからファイルをダウンロードする必要があります。
問題は、Aから直接ファイルをダウンロードするのが非常に遅いため、Bにログインするときにファイルをダウンロードする必要があり、sftp
Aからファイルを取得することです。
ファイルをダウンロードして、1つの行コマンドのみでBをプロキシとして直接使用する方法はありますか?
(奇妙な状況、 三角形の不等式 のようなものはインターネットルーティングを保持していませんか?)
とにかく、次を試してください[〜#〜] a [〜#〜]、ssh
into __[〜#〜] b [〜#〜]に-D
引数を付けて、
ssh -D 1080 address-of-B
これは、127.0.0.1:1080
でSOCKS5プロキシとして機能します。これは、SOCKS5プロキシ接続をサポートするあらゆるもので使用できます。 どうやら、wget
はこれを行うことができます 、環境変数を使用する
export SOCKS_SERVER=127.0.0.1:1080
wget http://server-C/whatever
場合によっては、curl
の方が便利な場合があります(つまり、wget
がSOCKS5を介してホスト名検索を実行できるかどうかはわかりませんが、これは私が推測する懸念の1つではありません)。また、Firefoxは、このようなSOCKS5プロキシを介して完全に機能します。
編集1行の解決策を探していることがわかりました。さて、どうですか
ssh address-of-B 'wget -O - http://server-C/whatever' >> whatever
つまり、wget
で取得した出力をstdout
にリダイレクトし、ローカル出力(ssh
からwget
をリモートで実行)をファイルにリダイレクトします。
これは機能しているようです。wget
の出力は少しわかりにくい( "saved to-")ので、-q
をwget
の呼び出しに追加することで取り除くことができます。
別のアプローチとして、通常B
にログインし、screen
セッションを開始するという方法もあります。そこで、ファイルのwget
を行います-すべて1つのディレクトリに。
そして、プログラムは喜んで実行できます。画面から切り離すだけで、バックグラウンドで実行できます。
ダウンロードが完了したら(多分もっと早く)、B
を使用してA
からrsync
にデータを取得できます(私の好み)。
wget
のSOCKS5プロキシで ssh
を使用するには、 security/dante
をインストールする必要があります パッケージを使用して、socksify
ユーティリティでSOCKS_SERVER
オプションを使用します。
Sudo pkg_add dante
続いて、バックグラウンドでSSH接続を開きます。
ssh -N -C -D1080 user@hostB &
そして、socksifyを通じてSOCKS5プロキシを通じてwgetを使用します。
env SOCKS_SERVER=127.0.0.1:1080 socksify wget http://website-C
ファイルをサーバーのstdout
にパイプし、ワークステーションのstdin
から読み取るだけです。
ssh -C user@hostB "wget -O- http://website-C" >> file-from-website-C
別の質問に対する別の回答 に触発されて、 proxychains-ng を使用することをお勧めします(これは proxychains の新しいバージョンです)。
proxychains.conf
、または~/.proxychains/proxychains.conf
。に/etc/proxychains.conf
ファイルを作成します。-f
コマンドライン引数を使用するか、PROXYCHAINS_CONF_FILE
環境変数を使用するかを指定します。proxychains.conf
ファイルに、以下を追加します。
[ProxyList]
socks5 127.0.0.1 1234
ssh -D 1234 your_Host_b
を実行します。これにより、sshはlocalhostのポート1234でリッスンし、リモートホストをSOCKSプロキシとして使用します。
ssh -ND 1234 your_Host_b
を実行します。 -N
は、sshがリモートサーバー上でコマンドを実行するのを防ぎます(つまり、シェルを開きません)。proxychains4 yourcommandhere yourparametershere
。いくつかの例をご覧ください:proxychains4 wget -O - http://ifconfig.co/
proxychains4 -q links http://ifconfig.co/
ボックスAからボックスBへのsshトンネルを実行し、ボックスAのルーティングテーブルに追加できます。そのウェブサイトCは、ボックスBへのトンネルを介して到達可能です。ボックスBでのパケット転送を許可する必要があります。
ここ 非常に優れた段階的なチュートリアルを見ることができます...
マシンBにトンネルを作成する必要があります。この場合、呼び出しはWebサイトCにリダイレクトされます。ただし、ISPが制限を設けていない限り、これがより高速になる理由に戸惑います。
ワンライナーは知りませんが、これはそれほど複雑ではありません。
マシンAでは、あなたはそうします(私はランダムに11111を取った、それが1024以上である限りあなたは何でも取ることができます、そうでなければあなたはルートになる必要があります)
ssh -f -C -N -L 11111:C:80 username@B
Bのユーザー名は、Bへの接続に使用するものです。これにより、マシンBのポート11111にトンネルが作成され、マシンCのポート80(HTTPのWebサイトはHTTPSの443を使用)にリダイレクトされます(ごちゃごちゃしていないと思います)オーダー ;) )
次に、マシンAからマシンB経由でファイルを直接ダウンロードできます。ファイルがhttp://C/path/to/file
にあると想定しているので、次のように使用します。
wget http://B:11111/path/to/file
これは、ポート転送(sshトンネリング)を介して行うことができます。これがリソースです: http://www.jfranken.de/homepages/johannes/vortraege/ssh2_inhalt.en.html#ToC9
基本的に、Bでポート転送を設定する必要があります。AがBにwgetを発行すると、BはパケットをCに転送し、結果をAに送り返します。