3.8. SSH トンネルを使った安全な TCP/IP 接続

謝辞: Gene Selkov,Jr.()から Eric Marsden の質問に対する返事として1999-09-08 に書かれた 電子メールからアイデアを頂きました。

sshをクライアントと Postgresサーバ間のネットワークを 暗号化するために使うことができます。正しく行えば、 これで十分に安全なネットワーク接続を行うことができるようになるばずです。

まずsshサーバが Postgresと同じマシン上できちんと起動していて、 sshを使ってログインできるユーザが存在することを確かめて下さい。 そうすると、次に示すコマンドでクライアントマシンから安全なトンネルを確立することができます。

> ssh -L 3333:foo.com:5432 joe@foo.com
-L 引数の1番目の数字、3333、はトンネルのローカル 側のポート番号で、自由に選択することが可能です。 2番目の数字5432はトンネルのリモート側のバックエンドが使用しているポート番号です。 2つのポート番号間の名前もしくはアドレスは、接続しようとしているデータベースサーバのホストです。 このトンネルを使ってデータベースサーバに接続するためには、ローカルマシンのポート3333に接続します。
psql -h localhost -p 3333 template1
データベースサーバにとっては、ユーザが実際に joe@foo.comであるかのように見え、認証プロシージャ がこのユーザ(joe@foo.com)のために発行した証明書を使います。 トンネルの確立が成功するためには、ssh を使用して端末セッションを確立したのと同様に、 ユーザ joe@foo.com が ssh を通して接続することが許可されていなければいけません。

Tip: ここで説明してきた概念に似た手続きを使用する、安全なトンネルを用意できる製品が 製品が他にもいくつか存在します。