アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

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は特に意味はありません。
ホスト名になにかないかと思ったら突然チバ!シガ!サガ!と思ったのでそのまま使いました。