CentOSサーバのバックアップ方法の検討

現在利用しているCentOSで「サーバ(グローバルIP)の特定のディレクトリのバックアップを取って、それをバックアップ先の外部PC(プライベートIP)から自動的に取得する。」ということをやってみた。
その覚え書き。

バックアップ

バックアップの方法だが、下記のサイトを参考にcronを利用して自動的に行うことにした。
自動バックアップ運用(tar+GnuPG+rsync/ftp) - CentOSで自宅サーバー構築

どうやって外部のPCからデータを取得するか

バックアップ先のPCがグローバルIPを持ったサーバの場合はftpサーバを立ててそこへ自動的に送ってやるようにすればいいと思う。
しかし、プライベートIPしか持っていないので、サーバへ接続してやる必要がある。
あと、処理をできるだけ自動で行いたい。

そこで、いろいろ試してみた結果、sftp + rssh + pycron を利用することで、やりたかった処理ができるようになった。

rsshのインストールと設定

以下のサイトを参考にしてインスールした。
シェルは使わせずに scp/sftp のみ公開したい場合 - Sleepless geek in Seattle

まず、下記のコマンドでrpmforgeのレポジトリを追加する。

$ wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
$ rpm -Uhv rpmforge-release-0.5.2-2.el5.rf.i386.rpm
$ yum -y install rssh

次に、rsshの設定を行う。
/etc/rssh.conf を以下のように修正する。

#allowscp
allowsftp
#allowcvs
#allowrdist
#allowrsync

sftp用ユーザの作成

sftp専用ユーザを作成する。

$ useradd user
$ passwd user
$ chsh user -s /usr/bin/rssh

ssh秘密鍵を作成する。

$ ssh-keygen -t rsa
$ mv ~/.ssh/id_rsa.pub authorized_keys

id_rsaをUSBなどで外部PCへコピーする。

クライアントPCの設定

sftp用バッチファイル batch を作成する。

cd /backup
get backup.tar.bz2
quit

backup.bat を作成する。

@ECHO OFF
sftp -b batch user@ホスト名
REM ファイル名を日付を含むものに変更
mv backup.tar.bz2 backup_%date:~0,4%%date:~5,2%%date:~8,2%.tar.bz2

backup.batに実行権限を付加。

chmod 700 backup.bat

下記のサイトを参考にして、pycronからbatch.bat を自動で実行するように設定。
Windowsでcronが使えるツール「pycron」 - Sometime PHP

まとめ

とりあえずこれで自動的にバックアップを取得してくれるようになったはず。
まだ、完全に動作を確認したわけではないので、後日追記。

追記 2010/11/17

ちょっとpycronの動作がややこしかったので、備忘録的な追記。

  • pycronで処理を行うと、バッチファイル実行時のカレントディレクトリがpycronのインストール先のフォルダになる。
  • pycron_console.exeを実行していないとうまくpycronが動いてくれない。