みなさんは、プロバイダ上にある自分の web page を更新するときに、ど ういうツールを用いていますか?多くのプロバイダでは、「FTP を使え」とい うことになっています。
しかし、FTP には、
という問題点があります。
このうち、1番目の問題点は、「更新されたファイルだけを選んで転送す る」作業を自動化するソフトが多く開発されていて、クリアされていると言っ てよいでしょう。
しかし、2番目の問題点は、FTP という仕組みを用いている間は、決して 克服できません(なお、telnet によるログインも、FTP 同様、パスワードが 丸裸、という危険を孕んでいます)。
では、パスワード漏洩の危険を冒さずに、プロバイダ上のファイルを更新 するにはどうすればいいのでしょう?それも、通信コストを抑えるためには、 更新されたものだけ送られるようにしたいものです。
この欲求に応えるものが、ssh と rsync です。
ssh は、パスワード漏洩に代表されるネットワーク上の脅威に対抗するべ く開発された仕組みで、通信内容がすべて暗号化されます。また、ホストのな りすましなどに騙されないですむよう、工夫が施されています。
使用する側の手順としては、telnet や ftp と同様、ネットワーク上の遠 隔ホストにログインして、コマンド実行やファイル操作を行うことが可能です。 また、あらかじめ適切な設定を施しておけば、rsh や rlogin の代替品として、 パスワード入力の手間を省いたログインが可能となります。 ※注
ssh を利用するには、OpenSSH を インストールするのがよいでしょう。最近の FreeBSD なら最初から OS につ いていますし、Linux などでもバイナリパッケージが用意されていると思いま す。
ここでは、OpenSSH の用法については説明しません。 SSH の基本的な使い方の解説をご覧になって、概念・用法を身に着けてお いてください。なお、以下のように rsync で ssh を利用するためには、まず パスワード入力なしで遠隔コマンドが実行できるようにしておくこ とが非常に重要です。最低限、この段階まであらかじめ整えておきましょう。 →[2002,9/9] FreeBSD Q&A 1578 も非常に参考になりますね。
ssh 接続ができるようになればしめたもので、rsync で「変更のあったファ イルだけ更新」が可能になります。
rsync を使う前に、ssh の動作確認をしておくのもよいでしょう。scp に よって、あるディレクトリをそっくりそのままプロバイダ側のホストにコピー できます。例えば、
% scp -pr ~/public_html home.provider.ne.jp:public_html
とすれば、自ホストの ~/public_html
以下が、プロバイダの ~/public_html
以下にコピーされます。
うまく行きましたか?それでは、いよいよ rsync をインストールしましょう。 例によってバイナリパッケージが多々あるでしょうから、それを使うのが簡単 でよいと思います。
注意しなくてはいけないのは、rsync を働かせるためには、プロバイ ダ側のホストにも rsync がインストールされている必要があるという点 です。もし、お使いのプロバイダに rsync がなかったら、インストールして もらえないか頼んでみましょう。ダメでも、自分でプロバイダ側のホストにロ グインして rsync をコンパイルし、自分の個人ディレクトリにインストール してしまう手があります。
さて、rsync のインストールも終わったら、まずは
% rsync -auHzv -n -e ssh ~/public_html/ home.provider.ne.jp:public_html/
と入力してみましょう。-n オプションがあ るため、この段階ではまだ実際の更新は行われません。ど のファイルが更新対象となるかだけが表示されます。
動作が正しそうだったら、-n オプションを取り除いて、おもむ ろに
% rsync -auHzv -e ssh ~/public_html/ home.provider.ne.jp:public_html/
とすれば、更新されたファイルのみが、ssh によって 暗号化された経路を通って、プロバイダ側のホストに転送されます。お疲れ様 でした。今後はこのコマンド一発で、プロバイダの web page が更新されます。
なお、rsync は手元から向こうへのコピーも、向こうからこちらへのコピー もいずれも可能ですが、一回のコマンド呼び出しではそのどちらかしかできま せん。ですから、プロバイダ側に蓄積されたデータ(掲示板の記事など)を手 元にコピーするには、上記コマンドのコピー元とコピー先を入れ換えたコマン ドをもう一度実行する必要があります。
これを毎度手で打つのは結構大変だし、オプションもすぐ忘れてしまうの で、スクリプト化してしまうのがおすすめです。私は、おおよそ以下のような スクリプトで双方向のディスク内容の同期を図っています。
---------->ssh と rsync による web data の同期 スクリプト(このように、複数回 rsync を実行する場合、その都度 ssh が呼び出され ます。その度にパスワード(パスフレーズ)を入力するのは大変面倒ですの で、上でパスワード入力なしで ssh ログインできる環境を作っておくように 指示したわけです)