このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】SSH実践演習④(SSHポートフォワーディング)

SSH実践演習④(SSHポートフォワーディング)

SSH実践演習では、以下の4部に分けて解説しています。

 SSHを使ったリモートアクセスを実践するために、仮想マシンを2台準備して、SSHクライアントに仮想マシンの「Ubuntu1」を、SSHサーバには仮想マシンの「Ubuntu2」を使用する構成にしています。

 SSHポートフォワーディング(SSHポート転送)は、ネットワーク通信を安全に行うための技術で、リモートサーバへの接続を確立する際に役立ちます。この技術を使用すると、あるポートに送信されたパケットをSSHを使用した安全な通信路を介して、別のポートに転送することが可能になります。SSHポートフォワーディングは、特に暗号化されていないプロトコルを安全に使用する場合や、直接アクセスできないリモートサーバにアクセスする場合に非常に有効です。

SSHポートフォワーディングとは

 SSHポートフォワーディングは、ローカルホストの特定のポートに送信されたパケットを、SSHを使った安全な通信路を経由して別のリモートサーバのポートに転送する技術です。この技術を使用することで、例えばローカルホストの10022番ポートにアクセスするだけで、SSHサーバを経由して目的のサーバーに安全にアクセスすることが可能になります。

利用例

SSHポートフォワーディングは、次のようなケースで使用されます。

  • 暗号化通信が行われないプロトコルを安全に使用する。
  • ローカルホストから直接アクセスできないリモートサーバにアクセスする。

SSHポートフォワーディングの書式

 SSHポートフォワーディングを行うには、まず通信路を開通させるためのコマンドを実行し、その後に開通させた通信路を利用してSSH接続を行います。

1.通信路を開通させるコマンド

以下のコマンドを使用して通信路を開通させます。

ssh -L 10022:192.168.1.190:22 -l user01 192.168.1.189

コマンドのパラメータ説明
10022ローカルホストのポート番号(Windows11)
192.168.1.190目的サーバのIPアドレスまたはホスト名(Ubuntu2)
22目的サーバのポート番号
user01経由するSSHサーバに存在するユーザー
192.168.1.189経由するサーバーのIPアドレスまたはホスト名(Ubuntu1)
通信路を開通させるコマンド

2.開通させた通信路を使ってSSH接続するコマンド

通信路を開通させた後、次のコマンドを実行して目的のサーバーにSSH接続を行います。

ssh -p 10022 -l user01 localhost

SSHポートフォワーディングの実行

以下の手順に従って、実際にSSHポートフォワーディングを行いましょう。

1.通信路を開通させるコマンドの実行

 まず、Windows11のPowerShellを使用して、通信路を開通させるためのコマンドを実行します。以下の手順で進めます。

Windows11のPowerShellを起動して、次のコマンドを実行します。

・「ssh -L 10022:192.168.1.190:22 -l user01 192.168.1.189」コマンドを実行します。

 -lオプションで指定したuser01のパスワードを求められるので、正しく入力します。これにより、通信路が開通します。

プロンプトが「user01@Ubuntu1:~$」となっていることが確認できます。

PS C:\Users\joeac> ssh -L 10022:192.168.1.190:22 -l user01 192.168.1.189
user01@192.168.1.189's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.8.0-40-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro
(省略)

Last login: Sun Sep  1 14:33:01 2024 from 127.0.0.1
user01@Ubuntu1:~$

2.開通させた通信路を使ってSSH接続するコマンドの実行

 次に、新たにPowerShellをもう一つ起動し、以下のコマンドを実行して開通させた通信路を利用してSSH接続を行います。

・「ssh -p 10022 -l user01 localhost」コマンドを実行します。

 このコマンドにより、ローカルホストの10022番ポートを通じて目的のサーバにアクセスすることができます。-lオプションで指定したuser01のパスワードを求められるので、正しく入力します。

プロンプトが「user01@Ubuntu2:~$」となっていることが確認できます。

PS C:\Users\joeac> ssh -p 10022 -l user01 localhost
The authenticity of host '[localhost]:10022 ([::1]:10022)' can't be established.
ED25519 key fingerprint is SHA256:z52p8Qnj9esp+Hi/TZfxNbbk7D06P5agDusdz9WtAn0.
This host key is known by the following other names/addresses:
    C:\Users\joeac/.ssh/known_hosts:4: 192.168.1.189
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[localhost]:10022' (ED25519) to the list of known hosts.
user01@localhost's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 6.8.0-40-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

(省略)
Last login: Sun Sep  1 13:03:43 2024 from 192.168.1.189
user01@Ubuntu2:~$

まとめ

 SSHポートフォワーディングは、リモートサーバへの安全なアクセスを実現する強力なツールです。特に、暗号化されていないプロトコルを安全に使用する場合や、アクセス制御が厳しい環境でのリモートアクセスに非常に有効です。この演習を通じて、SSHポートフォワーディングの基本的な使い方と実際の操作方法を理解し、ネットワークセキュリティを強化するためのスキルを身につけることができます。