sshでポートフォワード
sshには言わずと知れた「ポートフォワード」という機能があります。
読んで時の如しで、sshの暗号化されたトンネルを利用し、任意のポートに来た通信を転送できます。
何がうれしいかと言うと、リモートの 5432番 をローカルの 5432 にマッピング出きる。
つまり、sshさ え繋がれば、そのサーバから見える範囲ならなんでも使える!と言うことです。
1・ローカルへリモートのポートをマッピング
例えば、二つのホスト(chiba, shiga)があるとします。
chibaに、shigaの5900ポートをフォワードする場合は以下のようになります。
chiba:~$ ssh shiga -L 5900:localhost:5900
上記のセッションを張っていれば、localhostの5900はshigaの5900です。
この状態で、下記のようにするとshigaのVNCにつながります。(もちろん、shigaが5900でVNC待ち受けしていれば)
chiba:~$ xvncviewer localhost:0
では、コマンドの意味を解説します。
・ ssh
コマンドです。
・ shiga
接続先ホストです。192.168.0.100とか www.asial.co.jp とか色々入ります。
・ -L 5900:localhost:5900
今回の肝です。-Lは、「ローカルにリモートのボートをマッピング」という命令で、書式は
ローカルのポート:リモートから見たホスト:リモートから見たホストに対してマッピングしたいポート
となります。
この場合は、ローカルの5900に、リモートから見たlocalhostの5900番をマッピングと言う意味になります。
細かいことはmanpageで。
もちろん、localhost以外の場合は以下のようになります。
chiba:~$ ssh shiga -L 5900:hikone:5900
なお、hikoneからは、shigaが5900にアクセスしているように見えます。
この方法は、chibaからhikoneに直接アクセス出来ない場合に役立ちます。(chibaからのパケットをRejectしているとか、hikoneがnatの中など)
2・ローカルのポートをリモートにマッピング
先ほどとは逆です。オプションは、-Rを使用します。
chibaの5900番をshigaの5900番にマッピング
chiba:~$ ssh shiga -R 5900:localhost:5900
-R リモート(shiga)のボート:ローカル(chiba)から見たホスト:ローカル(ry)ポート
こんなこと出来て何がうれしいかというと、例えば、natの中にあるホストにnatの外から直接アクセス出来ます。
さっきのhikoneがプライベートアドレスしか持っていないが、shigaがnatしている場合、chibaからhikoneへは、chiba->saga->hikoneとフォワードする必要があるが、逆にhikoneからchibaは直接見えるため、以下のようにすれば一発でできる。
hikone~:$ ssh chiba -R 5900:localhost:5900
3・共有
通常 -L または -R でセッションを張った場合、ローカル(接続元)では、127.0.0.1:5900のように、loが使用されます。
-g をつけると、0.0.0.0:5900のように、どこからでも接続を受け付けるようになるので、他のマシンからもアクセスさせることが出来ます。
chiba:~$ ssh shiga -g -L 5900:hikone:5900
この状態で、ichikawa(chibaにアクセス出来るホスト)から 、
ichikawa:~$ xvncviewer chiba:0
とすれば、ichikawaからhikoneの5900にアクセス出来ます。
データセンタのDBサーバに、オフィスの中からつなぎたいなどの場合に便利ですね。
2.5・少々複雑なフォワード
-Lでネスト
ichikawa:~$ ssh chiba -L 5900:localhost:5900
chiba:~$ ssh saga -L 5900:hikone:5900
-Lと-Rを組み合わせ
ichikawa:~$ ssh chiba -L 5900:localhost:5900
hikone:~$ ssh chiba -R 5900:localhost:5900
やっていることは同じですが、後者の方がトンネル内に通している本数が少ないため軽量です。
4・暗号化
もちろん、sshでつないでいる範囲しかされないので注意してください。
3の例の場合は
ichikawa -vnc-> chiba -ssh-> shiga -vnc-> hikone
vncの範囲は暗号化されないため気をつけてください。
5・最後に
長々と書いてきましたが、何といっても「百聞は一見に如かず」と言うことで、実際に動かしてみるのが一番です。
実際、複雑な条件なんて使おうと思う環境が無ければ使いません。
実際に使う機会がやってきたときは、
・sshにはポートをマッピングする機能がある
・ポートフォワードという
あたりを覚えていれば、ググれば何か出てきます。あとは使って覚えてください。
本文中のchibaとかshigaは特に意味はありません。
ホスト名になにかないかと思ったら突然チバ!シガ!サガ!と思ったのでそのまま使いました。