はじめに:
SSHは、SecureShellまたはSecureSocket Shellとも呼ばれ、ユーザー、特にシステム管理者に、セキュリティで保護されていないネットワークを介してコンピュータにアクセスするための安全な方法を提供するネットワークプロトコルです。
Secure Shellは、強力なパスワード認証と公開鍵認証に加えて、インターネットなどのオープンネットワークを介して接続する2台のコンピューター間の暗号化されたデータ通信を提供します。
SSHトンネリングは、暗号化されたSSH接続を介して任意のネットワークデータを転送する方法です。これは、主にレガシーアプリケーションに暗号化を追加したり、仮想プライベートネットワークとして使用したり、ファイアウォールを越えてイントラネットサービスにアクセスしたりするために、さまざまな理由で使用できます。また、ポートフォワーディングを使用して、特定のアプリケーションのデータトラフィックを保護する方法も提供します。基本的には、SSHを介してTCP/IPポートをトンネリングします。これは、アプリケーションデータトラフィックが暗号化されたSSH接続内を流れるように転送されるため、転送中に盗聴または傍受されないことを意味します。
前提条件:
- SSHサーバー SSH接続をリッスンします(X11Forwardingを有効にする必要があります。sshd構成ファイルで確認できます)
- SSHクライアント ローカルリスニングポートからSSHサーバーを経由してアプリケーションサーバーにトラフィックを転送する
- 宛先サーバー サービスの提供(http、vncなど)
SSHサーバーと宛先サーバーは、同じマシン上に置くことも、ネットワーク経由でアクセスできる異なるマシン上に置くこともできます。次の図は、SSHサーバーとアプリケーションサーバーが異なるマシン上にあり、ネットワーク上に接続されており、クライアントマシンがインターネット経由でSSHサーバーにアクセスしていることを示しています。

クライアントが暗号化をネイティブに使用しないサービスに接続したいが、トラフィックが暗号化されていない状態でインターネット経由で送信されないようにするセットアップを作成しましょう。このシナリオの環境は次のとおりです。
SSHサーバー:SSHはIPアドレス192.168.1.1のポート22でリッスンしています
宛先サーバー:VNCサービスはIPアドレス192.168.1.2のポート5900でリッスンしています
クライアントマシン:SSHおよびVNCクライアントがインストールされています
PuTTYを使用したトンネルの作成 :
- PuTTYクライアントのユーザーインターフェイスを開きます
- [セッション]ウィンドウの[PuTTYセッションの基本オプション]で、次の画像に示すように、SSHサーバーのIPアドレスとリスニングポートを入力します。

3.左側のペインで、[接続]->[SSH]->[トンネル]
を選択します。
4. [SSHポート転送を制御するオプション]で、次の設定を入力します。
5.送信元ポート:クライアントで使用されていない任意のポートを選択します。この例では1590を使用しています。
6.宛先:宛先サーバーのIPアドレスとリスニングポート、192.168.1.2:5900。

7.[ローカル]および[自動]ラジオボタンを選択したままにします。
8.[追加]をクリックしてこれらの設定を保存します。
9.「開く」をクリックしてSSHトンネルを作成します。プロンプトが表示されたら、SSHサーバーのユーザー名とパスワードを入力します。
OPENSSHを使用したSSHトンネルの作成:
SSHトンネルは、OPENSSHクライアントを使用して以下のコマンドを使用して作成できます。
ssh -L 1590:192.168.1.2:5900 192.168.1.1
こちら-L1590 ローカルポートを示します
192.168.1.2:5900 宛先サーバーのIPとポートを示します
192.168.1.1 SSHサーバーのIPアドレスを示します
SSHサーバーへの資格情報を使用してコマンドloginを入力した後。
SSHトンネルを使用したVNCサービスの接続 :
SSHサーバーへのログインに成功したら、ローカルポートを使用して宛先サーバーにログインするようにVNCクライアントを構成します。
ローカルループバックアドレス127.0.0.1とポート1590を使用します

この例は、VNCポートのトンネリングを示しています。同じ設定を使用して、ポートとIPを変更することで任意のサービスにアクセスできます。
SSHリバーストンネリング :
リバーストンネリングも同じようなものですが、この場合、宛先サーバーはトンネルを使用して、送信元ネットワークまたはマシン自体でホストされているサービスにアクセスできます。
例を考えてみましょう
ファイアウォールの背後にあるリモートネットワーク上にサーバーがあり、リモートネットワークからネットワークへのSSH(ポート22)のみが開いているが、Linuxボックスでホストされているポート80で実行されているhttpサービスにアクセスしたいとします。
>このような逆トンネリングが便利なシナリオの場合、安全かつ簡単に行う方法を以下に示します。
httpサービスがホストされているLinuxボックスで以下のコマンドを使用します…
ssh -R 180:localhost:80 [email protected]
ここで、 -R 180:localhost はリモートポートとIP/ホスト名です(リモートサーバーがhttpサービスにアクセスするために使用します)
そして[email protected] WebサービスにアクセスするリモートサーバーのIPとユーザー名です

クレデンシャルを使用してコマンドログインを入力した後、
これで、リモートサーバーからウェブサーバーにアクセスできます。

SSHトンネリングとリバーストンネリングを使用して、アクセスできないものにもアクセスできるシナリオがたくさんあります🙂その背後にあるsshの簡単さとセキュリティを備えています。