SSHプロトコルがターゲットに正常に接続できないのはなぜですか?

SSHプロトコルがターゲットに正常に接続できないのはなぜですか?

Firefoxではに接続できますgoogle.com:80

$ ssh -L 9000:google.com:80 testme@localhost

Firefoxでは、次に接続してhttp://localhost:9000/から

  1. これは間違いです。

要求されたURL /がこのサーバーに見つかりません。それは私たちが知っているすべてです。

なぜそのような違いがありますか?ありがとうございます。

答え1

接続は正しく設定されているが、ブラウザがGoogleサーバーが処理するように構成されていないホストとURL( 'localhost:9000'の '/')を要求しています。

curl -v少なくとも、次を使用してリクエストを表示できます。

GET / HTTP/1.1
Host: localhost:9000

「Host」行は、要求される仮想ホストを決定するために使用されます(これは、1.0と比較されるHTTP 1.1の新機能の1つです)。 Googleサーバーには、「localhost:9000」用に設定された仮想ホストがないため、要求されたリソースが見つからず、404状態で応答できません。

ほとんどの場合、Web検索の問題を解決し、SSHトンネルの使用を検討している場合は、プロキシを使用する必要があります。場合によっては、必要に応じてSSHトンネルを使用してプロキシの受信ポートを転送することもできますが、通常はWebサーバーの受信ポートを転送するためにSSHトンネルを使用しません。

ただし、ここで何が起こっているのかを理解し、Webブラウザでトンネルを使用できるようにするには(上記は無視)、localhostがターゲットが期待するものと同じホストとポートで応答することを確認するか、それを指定する必要があります。 「ホスト」ヘッダーを使用する必要がありますcurl

curl -H "Host: google.com" http://localhost:9000/

たとえば、Webブラウザを使用すると、トンネルを作成するときにホスト名の代わりにIPアドレスを指定できます。

ssh -L 9000:216.58.213.142:443 testme@localhost

その後、追加

127.0.0.1 google.com www.google.com

ブラウザからファイルにアクセスする前に/etc/hostshttps://google.com:9000

関連情報