このセクションでは ssh フォワードコネクションを使用するために POP クライ アントソフトウェアを設定する方法を説明します。まず私の知っている POP を 取り扱う最も柔軟なソフトウェアである fetchmail (ESR による優れたメールの 取得と転送のユーティリティ) を見ていきます。 fetchmail は http://www.tuxedo.org/~esr/fetchmail/ でみつけることができます。 fetchmail に付いてくる優れた文書を読むことに よって fetchmail は素晴しい働きをしてくれるでしょう。
私は .fetchmailrc
を以下のように設定しています。
defaults
user msingh is manish
no rewrite
poll localhost with protocol pop3 and port 11110:
preconnect "ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 5"
password foobar;
とっても単純でしょう? fetchmail には多くのコマンドがありますが、重要な部
分は preconnect
の行と、poll
のオプションです。
私たちは POP サーバに直接的には接続しません。代わりに localhost の
11110 番のポートに接続しています。preconnect
の部分は
fetchmail が実行されるたびに 5 秒間コネクションを張っておくということを
表わしています。fetchmail はこの時間を使って自分のコネクションを張ります。
残りはfetchmail 自身の処理です。
fetchmail を起動するたびに、ssh のパスワードを要求されます。fetchmail を バックグラウンドで動かす時 (私はそうしています) にはそれは少々都合が良く ありません。その場合は次のセクションに進みましょう。
ssh ではさまざまな方法で認証を行えます。そのうちの一つが RSA 公開鍵暗号
です。 ssh-keygen
を用いることによってあなたのアカウント用の鍵
を作りだすことができます。鍵にはパスフレーズを設定することもできますが、
空のままにすることもできます。あなたがローカルで用いるアカウントがどのぐ
らい安全だと思うかによって、パスフレーズが必要かどうかが決まります。
もしあなたのマシンが安全だと思うなら、パスフレーズ無しでも構わないでしょ
う。その場合は .fetchmailrc
は単なる fetchmail の起動だけに使わ
れます。fetchmail をデーモンとして動かしておけば、ダイアルアップしたとき
に自動的にメールは取り込まれます。それでおしまいです。(訳注 :
fetchmail -d でデーモンとして動かせます。詳しくは fetchmail(1) の man ペー
ジを参照して下さい。
ただし、もしパスフレーズが必要だと思った場合には、事態はいくぶん複雑にな
ります。ssh は agent の管理下で実行することができます。agent は
鍵を登録し、ssh からのあらゆるコネクションを認証します。それで、
getmail.sh
というスクリプトを用意しました。
#!/bin/sh
ssh-add
while true; do fetchmail --syslog --invisible; sleep 5m; done
ダイアルアップしたときに、次のように打ちます。
$ ssh-agent getmail.sh
パスフレーズを一度要求されますが、その後は 5 分毎にメールを確認してくれ ます。ダイアルアップ接続を切断するときは、ssh-agent を終了させます。(私 の場合は自分の ip-up と ip-down スクリプトの中で自動的にやっています)
もしも fetchmail を使えなかったり、使いたくなかったりしたらどうなるでしょ う。 Pine, Netscape やその他にも POP 機能を持ったクライアントがあります が、まずは fetchmail を使う事を考えましょう! その方が遥かに柔軟ですし、 メールクライアントにはこの種のことをたくさんやらせるべきではありません。 Pine と Netscape の両方ともローカルのメールシステムを使うように設定でき ます。
しかし、あなたのクライアントが fetchmail のような preconnect の機能を持
たない場合には ssh のポート転送をあなたが接続するまでの間ずっとアクティ
ブにしておかないといけません。つまりそれはコネクションを保持しておくため
に sleep 100000000
のような設定を使うことを意味します。これはお
そらくあなたのネットワークの管理者には歓迎されないでしょう。
次に、クライアントの中には (Netscape のように) ポート番号を 110 番に強制 的に設定してあるものもあります。その場合 root になって固定なポートからポー ト転送する必要があります。これも悩ましいことです。でも動きます。