SSHを用いると,遠隔地間にある2つの計算機間に安全な通信路を確立する事がで きます.これは遠隔地間の通信を暗号化して行なうために,悪意がある者が途中 経路で通信を盗聴していたとしても,内容を理解することが不可能である,とい う事実に因ります.このSSHの通信路を用いて,POPやFTPなどの安全でない通信 を行なうのが,ポート転送です.
ポート転送には,ローカル転送とリモート転送の二種類があります.ローカル転 送は,手元の計算機のポートに出入りするデータを,接続先の計算機に転送する ものです.リモート転送は,接続先の計算機のあるポートに出入りするデータを 接続元の計算機へ転送し,手元の計算機上で提供されているサービスを遠隔地の 計算機から利用する場合に利用します.サービスを受ける計算機が異なるだけで, どちらもほぼ同様に使うことができます.ローカル転送の方が良く利用されると 思われますので,以後のポート転送は特に断らない限りローカル転送の事としま す.
POPを例にしてSSHによるポート転送を説明します.図4にその 概念図を示します.先に示した図3のようにPOPクライアントとサー バが直接会話するのではなく,別のSSHという暗号語を喋る通訳とか代理人を介 して情報をやりとりする,という風に考えるとわかりやすいかもしれません. POPクライアントから見ると,SSHはPOPサーバの代理人に見え,POPサーバからは SSHがPOPクライアントのように見えます.
図5に,より詳細な関係図を示します.POPクライアント 側の計算機では,POPクライアントを起動する前に,ユーザは転送に利用するポー ト番号jjjjを指定して予めSSHを起動しておきます.その後POPクライアントを 「自分自身の計算機のjjjj番ポートに対して接続する」ように起動します.この ためにはPOPクライアントプログラムが,接続先のポート番号を設定可能でなけ ればなりません.
クライアント側のjjjj番ポートは,SSHがポート転送を行なうものとして予め起 動されていますので,POPクライアントからの接続を受けたクライアント側SSHは, サーバ側のSSHへデータを暗号化して転送します.この時クライアント側のSSHは kkkk番ポートから,POPサーバ側の計算機のSSH(22番ポート)へデータを送ります. kkkk番ポートは,OSがSSHに自動的に割り当てた番号です.
サーバ側のSSHは,クライアント側計算機からの通信を解読してPOPサーバに送り ます.その際,内部にnnnn番ポートを作成し,そのポートを通じてPOPサーバと 通信します.nnnn番ポートも,OSを介してSSHに自動的に割り当てられる番号で す.POPサーバは,サーバ側内部にあるSSHをPOPクライアントと見なして処理を 行ないます.メールの送信のようなPOPクライアントへの応答は,サーバ側のSSH へ送ります.
POPクライアントはPOPサーバと通信するように自分自身の計算機内部にあるSSH と通信します.逆にPOPサーバはPOPクライアントと通信するように,サーバ側計 算機内部にあるSSHと通信するのです.このようにプログラムの通信情報を,SSH が代理人となって暗号化通信を行なうのがポート転送です.