web-dev-qa-db-ja.com

WebサイトへのSSHローカルポート転送

今日、sshトンネルの設定について記憶を更新していましたが、ローカルポートをWebサイトに転送することを説明しているいくつかの情報源に出くわしました。例: https://www.techrepublic.com/article/how-to-use-local-and-remote-ssh-port-forwarding

「クライアントでターミナルウィンドウを開き、次のコマンドを発行します。

ssh -L 8080:www.slashdot.org:80 localhost

クライアントマシンのユーザーパスワードを入力するように求められます。基本的に、SSHを介してクライアントマシンに接続しますが、宛先への必要なSSHトンネルを作成します。ローカルアカウントに対して正常に認証されたら、ブラウザを開いて http:// localhost:808 をポイントします。ブラウザは自動的にスラッシュドットにリダイレクトするはずです。」

ただ、実際に試してみると、これは機能しません。接続の失敗、500エラー、404エラーなどが発生します。https以外のサイトも試しました。どうしたんだ?

1
shwoseph

この手法は機能しますが、アクセスするすべてのドメインのポートを転送する必要があるため、Webサイトへのアクセスにはあまり適していません。 chromeにスラッシュドットをロードして開発ツールを使用すると、スラッシュドットをロードすると、実際には少なくとも21の異なるドメインからコンテンツがロードされていることがわかります。1つのドメインのみを転送している場合は、すべてのコンテンツが表示されるわけではありません。

もう1つの問題は、ポート443でコンテンツを提供しているサイトのポート80にトンネリングしていることです。「curl-i slashdot.org」を実行すると、HTTPSへの301リダイレクトが提供されることがわかります。ブラウザがHTTPSへのリダイレクトに従おうとすると、すべてが失敗します。

SshをSOCKSプロキシとして使用し、それを使用するようにブラウザーを構成することをお勧めします。次のように、ローカルポートでsocksプロキシを開くことができます。

ssh -D 8080 myhost.com

myhost.comはあなたの場合「localhost」である可能性がありますが、通常はリモートサーバーです。このセッションを開いたら、ブラウザの設定に移動し、ローカルホストポート8080を指すSOCKS v5プロキシを使用するようにブラウザを設定します(Firefoxではchrome imho)よりも簡単です)。ブラウザはすべてのトラフィックをsshトンネルを介して実行します。

これは、プライベートネットワークでホストされているWebサイトにアクセスしたり、安全でないと思われるネットワーク全体でデータを暗号化したりする場合に非常に役立ちます。

2
Jeff Aigner

ジェフは絶対に正しいですが、ローカルポートフォワーディングを使用したソリューションを追加したいと思います。

アクセスしようとしているWebサイトはHTTPSを使用しているため、そのポート443にアクセスする必要があります。

$ ssh -L 8080:www.slashdot.org:443 localhost

それに加えて、ブラウザではhttps://の代わりにhttp://を使用する必要があるため、ブラウザで次のURLにアクセスします:https://localhost:8080。 Firefoxで、アクセスしようとしているWebサイトに対して発行されたSSL証明書がローカルホストで使用するように署名されていないため、これにより「安全でない接続」の警告が表示されました。ただし、この警告を無視して続行できます。

1
confetti