玄箱 Debianでrsyncとcronで定期的にバックアップする
ここでの環境は、玄箱とGLAN Tankのそれぞれにsshとrsyncをインストールします。
手動でのバックアップは実現できたのですが、パスワードを入力する必要があり自動化することができません。 そこで、「rsync + cron + ssh (rsyncd を立てない編)」を参考にrsync(ssh)とcronを使ってバックアップを 定期的に取るようにします。
鍵ペアの作成
バックアップ元のPCで鍵ペアを生成します。
# ssh-keygen -t dsa -N "" -f /root/.ssh/rsync
Generating public/private dsa key pair.
Your identification has been saved in /root/.ssh/rsync.
Your public key has been saved in /root/.ssh/rsync.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@KURO-BOX
鍵ペア rsync (秘密鍵)、 rsync.pub (公開鍵)が作成されるので、公開鍵をバックアップ先の /root/.ssh/authorized_keys に追加します。
# cd /root/.ssh/
# cat rsync.pub >> authorized_keys
指定したコマンドのみを実行するようにする
このバックアップ方法は、rootアカウントで行うため実行できるコマンドを制限します。
バックアップ先の sshd_config の設定を変更し指定したコマンドのみを実行するようにします。
#PermitRootLogin no
PermitRootLogin forced-commands-only
バックアップ先のrsyncを実行するコマンド
バックアップ先のrsyncはデーモンとして動作していないため、バックアップ先のrsyncが何らかの形で 動作しないといけないようです。そのためのコマンドを知るには、次のようにバックアップ元でrsync を実行します。
# rsync -vv -az -e "ssh -i /root/.ssh/rsync" /mnt/sharep/ \
> root@192.168.xxx.010:/mnt/public/
Password:
opening connection using ssh -i /root/.ssh/rsync -l root 192.168.xxx.010 rsync
--server -vvulogDtprz . /mnt/public/
protocol version mismatch - is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(69)
コマンドを実行すると、上記メッセージが表示され失敗します。この失敗したメッセージにバックアップ先 で実行すべきコマンドが表示されています。
rsync --server -vvulogDtprz . /mnt/public/
このコマンドをバックアップ先の authorized_keys に追加します。
# vi /root/.ssh/authorized_keys
command="rsync --server -vvulogDtprz . /mnt/public/" ssh-dss AAA…
ここまで設定できたら、バックアップができるか確認します。
# rsync -vv -az -e "ssh -i /root/.ssh/rsync" /mnt/sharep/ \
> root@192.168.xxx.010:/mnt/public/
バックアップができていることを確認したら cron で定期的に実行するよう設定します。
私が調べた範囲では、–serverオプションを見つけることができませんでした。
より信頼性を高める(セキュリティ)
「rsync + cron + ssh (rsyncd を立てない編)」のページには、 よりセキュリティを高めるために authorized_keys へ設定する内容も紹介されています。
from=““オプションを指定することで、指定したホストからのみ接続するように設定できるようです。
# vi /root/.ssh/authorized_keys
Password:
command="rsync --server -ulogDtprz . /mnt/public/",from="192.168.xxx.001",
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAA...