ウェブサイト検索

SSH トンネリングを使用して制限されたサーバーにアクセスする方法


SSH トンネルを起動する方法を知っていれば、アクセスできないネットワークやシステムにアクセスできるようになります。

SSH トンネリングまたは SSH ポート転送は、クライアントとサーバー マシンの間に、サービス ポートを中継できる暗号化された SSH 接続を作成する方法です。

ポート転送を使用したローカル SSH トンネル

直接アクセスできないリソースにアクセスしたい場合は、ローカル SSH トンネルを使用できますが、アクセス権のある SSH サーバーならアクセスできます。以下にいくつかのシナリオを示します。

リモートサーバーへのプロキシ

上の画像では、青いホストは http://192.168.0.3 にアクセスできませんが、192.168.0.2 に SSH 接続できます。次の ssh コマンドを青色のホストで実行すると、青色のホストが赤色のホストにアクセスできるようになります。

ssh -L 8080:192.168.0.3:80 reduser@192.168.0.2

これで、青色のホストがブラウザを開いて http://localhost:8080 にアクセスすると、192.168.0.3 でホストされているウェブページが表示されます。

ローカルポートフォワード

上の画像では、青いホストはポート 80 で赤いホストに接続しようとしていますが、間にファイアウォールがあり、これを拒否しています。青色のホストは赤色のホストに ssh 接続できるため、そのポートにアクセスするためのローカル ポート転送 ssh トンネルを作成できます。

青色のホスト上のコマンドは次のようになります。

ssh -L 8080:192.168.0.2:80 reduser@192.168.0.2

これで、青いホストがブラウザを開いて http://localhost:8080 にアクセスすると、赤いサーバーのポート 80 にあるものはすべて表示されるようになります。

ローカルポート転送の構文

ローカル SSH ポート転送トンネルを作成する構文は次のとおりです。

ssh -L <LPORT>:<RHOST>:<RPORT> <GATEWAY>

ポート転送を備えたリモート SSH トンネル

このシナリオでは、リバース SSH トンネルを作成します。ここでは、一方向で ssh トンネルを開始し、そのトンネルを使用して逆方向の ssh トンネルを作成できます。これは、ドローン コンピュータをネットワーク内に落として「電話をかけたい」場合に便利かもしれません。その後、電話がかかってくると、確立された SSH トンネルを介して接続できます。

私たちは緑色のホスト上にいますが、青色のホストに SSH 接続したいと考えています。ただし、ファイアウォールはこの接続を直接ブロックします。青色のホストは緑色のホストに ssh 接続できるため、それを使用して接続でき、緑色のホストが青色のホストに ssh 接続したい場合は、以前に確立されたこのトンネルに沿って接続できます。

青色のホストは次のように ssh トンネルを開始します。

ssh -R 2222:localhost:22 greenuser@192.168.0.2

これにより、緑のホストでポート 2222 が開き、それが青のホストのポート 22 にポート転送されます。したがって、緑のホストがポート 2222 で自分自身に SSH 接続すると、青のホストに到達します。

これで、緑色のホストは次のように青色のホストに SSH 接続できるようになります。

ssh -p 2222 blueuser@localhost

-N オプションの使用

ssh を使用する場合、-N フラグを指定すると、ssh 接続の確立時に ssh 接続経由でコマンドを送信する必要がないことを ssh に指示できます。このオプションは、実際にプロンプトを取得する必要がないことが多いため、トンネルを作成するときによく使用されます。

AutoSSH

autossh コマンドは、トンネルに永続性を追加するために使用されます。この機能の役割は、ssh 接続が確立されていることを確認し、確立されていない場合は作成することです。

これは、ご存知のかもしれない autossh コマンドです。

autossh -N -i /home/blueuser/.ssh/id_rsa -R 2222:localhost:22 [email 

-i /home/blueuser/.ssh/id_rsa オプションは、証明書を使用してこの ssh 接続を認証するように指示します。

これで、トンネルがダウンすると、自動的に再接続が試行され、成功するまで試行が続けられます。再起動後も永続的にするには、ssh コマンドを cron ジョブとして追加します。

関連記事: