SSHローカルポートフォワーディング

SSHポートフォワーディングは、SSH接続を利用して異なるネットワーク間で通信を安全に転送する方法です。この技術を使用することで、非公開のネットワークリソースへの安全なパスを作成することができます。

SSHポートフォワーディングはローカルフォワーディング、リモートフォワーディング、ダイナミックフォワーディングの3種類があり、目的に応じて使い分けます。ここではローカルフォワーディングについて説明します。

ローカルフォワーディング

一番よく使うパターンかと思います。
例えば、ネットワーク環境の都合で直接アクセスできないサーバ等にSSHでログイン可能な踏み台サーバを経由してアクセスすることができます。

下記は踏み台(SSHサーバ)経由でHTTPサーバにアクセスする例です。

クライアントPCから下記コマンドを実行して踏み台サーバにログインします。

Bash
$ ssh -L 20080:<user1>@172.16.0.1:80 192.168.0.254

下記のようにsshのコンフィグファイルに記載しておくこともできます。

Bash
$ cat ~/.ssh/config
Host fumidai
  HostName 192.168.0.254
  Port 22
  User <user1>
  LocalForward 20080 172.16.0.1:80
$
$ ssh fumidai

ログイン後、クライアントPCでブラウザを起動してアドレスバーにhttp://localhost:20080を入力すると踏み台の先にいるHTTPサーバにアクセスできます。

多段フォワーディング

踏み台サーバが2台以上ある場合や、開発用サーバにSSHでログインして任意のポートでテスト用アプリを立ち上げたりしたい時に使えます。

クライアントPCから下記のコマンドを実行するとHTTP&SSHサーバにログインできます。

Bash
$ ssh -o ProxyCommand='ssh -W %h:%p <user1>@192.168.0.254' <user2>@172.16.0.1

下記のようにsshのコンフィグファイルに記載しておくと簡単です。

Bash
$ cat ~/.ssh/config
Host fumidai
  HostName 192.168.0.254
  Port 22
  User <username1>

Host httpserver
  HostName 172.16.0.1
  Port 22
  User <username2>
  ProxyCommand ssh -W %h:%p fumidai
  LocalForward 20080 localhost:80
$
$ ssh httpserver