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

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

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

まず SSH サーバが PostgreSQL と同じマシン上で正しく起動していて、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.comsshを通して接続することが許可されていなければいけません。

Tip: ここで説明してきたものと似た概念の手続きを使用して、安全なトンネルを提供可能なアプリケーションがほかにもいくつか存在します。