sshデータの送信に加えて、sshプロトコルは2つのホスト間で他のトラフィックをトンネリングできます。最も一般的な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 [email protected]
これで、青いホストがブラウザを開くことができます。http://localhost:8080
にアクセスしてください。 、192.168.0.3でホストされているウェブページが表示されます。
ローカルポートフォワード
上の画像では、青いホストがポート80で赤いホストに接続しようとしていますが、その間にファイアウォールがあり、これを拒否しています。青いホストは赤いホストにsshできるので、そのポートにアクセスするためのローカルポート転送sshトンネルを作成できます。
青いホストでのコマンドは次のようになります:
ssh -L 8080:192.168.0.2:80 [email protected]
これで、青いホストがブラウザを開いてhttp://localhost:8080
に移動すると 彼らは、赤いサーバーがポート80にあるものをすべて見ることができます。
ローカルポート転送構文
ローカルsshポート転送トンネルを作成するためのこの構文は次のとおりです。
ssh -L <LPORT>:<RHOST>:<RPORT> <GATEWAY>
このシナリオでは、リバースsshトンネルを作成しています。ここでは、一方向にsshトンネルを開始し、そのトンネルを使用して反対方向にsshトンネルを作成できます。これは、ドローンコンピュータをネットワーク内にドロップして、「電話で家に帰る」場合に便利です。その後、自宅に電話をかけると、確立されたsshトンネルを介して接続できます。
私たちは緑のホストにいて、青のホストにSSH接続したいと思っています。ただし、ファイアウォールはこの接続を直接ブロックします。ブルーホストはグリーンホストにSSHで接続できるため、それを使用して接続できます。グリーンホストがブルーホストにSSHで接続したい場合は、以前に確立されたこのトンネルに沿って乗ることができます。
青いホストは次のようなsshトンネルを開始します:
ssh -R 2222:localhost:22 [email protected]
これにより、緑のホストのポート2222が開き、青のホストのポート22にポート転送されます。したがって、緑のホストがポート2222でそれ自体にSSHで接続すると、青のホストに到達します。
これで、緑のホストは次のように青のホストにSSH接続できます。
ssh -p 2222 [email protected]
-Nオプションの使用
sshを使用する場合は、-N
を指定できます 確立時にssh接続を介してコマンドを送信する必要がないことをsshに通知するフラグ。このオプションは、実際にプロンプトを受け取る必要がないことが多いため、トンネルを作成するときによく使用されます。
Autossh
autossh
コマンドは、トンネルに永続性を追加するために使用されます。 ssh接続が確立されていることを確認し、確立されていない場合は作成するのが仕事です。
これがあなたが認識できるautosshコマンドです。
autossh -N -i /home/blueuser/.ssh/id_rsa -R 2222:localhost:22 [email protected]
-i /home/blueuser/.ssh/id_rsa
オプションは、このssh接続を認証するために証明書を使用することを示しています。
これで、トンネルがダウンすると、トンネルは自動的に再接続を試み、成功するまで試行を続けます。再起動しても永続的にするには、sshコマンドをcronジョブとして追加します。