グローバルサーバとローカルサーバ間でrsync(cron)
2011年10月8日グローバルに公開しているコンテンツやデータベースをローカルサーバへrsyncでバックアップ。
その手順のメモ。
要件:
- rsyncをcronで定期実行
- バックアップ対象は既に、圧縮されているものとする
- rsyncdなどは特に利用しない
手順:
- リモートサーバのsshd設定を変更
- rootユーザでのssh+rsync+cronを利用する為、以下のように設定を変更
$ sudo vim /etc/ssh/sshd_config #PermitRootLogin no PermitRootLogin forced-commands-only $ sudo /etc/rc.d/init.d/sshd restart
- ローカルサーバで、キーペアを作成
- cronで利用する為、パスフレーズは空のものを準備する
$ sudo ssh-keygen -t dsa -N "" -f /root/.ssh/rsync
- リモートサーバへ公開鍵を転送
$ sudo scp /root/.ssh/rsync.pub user@remote.example.com:~/
- リモートサーバのauthorized_keysへ追記
$ sudo sh -c 'cat ~user/rsync.pub >> /root/.ssh/authorized_keys' $ rm -f ~user/rsync.pub
- コマンドを限定した、接続テスト
- 実行できるコマンドを限定する為、テスト的にlsのみを設定
$ sudo vim /root/.ssh/authorized_keys command="/bin/ls" ssh-dss AAA...
- 接続テスト
$ sudo ssh -i /root/.ssh/rsync root@remote.example.com .Xauthority .fonts.cache-1 .k5login .profile ref .bash_history .gnupg .lftp .ssh supfile.ports .cshrc .history .login XF86Config.new tmp Connection to remote.example.com closed.
- 公開鍵に指定するコマンドを得る
$ sudo rsync -vv -az -e "ssh -i /root/.ssh/rsync" /home/backup/ root@remote.example.com:/home/backup/ Password: opening connection using ssh -i /root/.ssh/rsync -l root remote.example.com rsync --server -vvulogDtprz . /home/backup/ 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 . /home/backup/ からオプション -vv を取り除いたものを、リモートの /root/.ssh/authorized_keys に指定する
$ sudo vim /root/.ssh/authorized_keys command="rsync --server -ulogDtprz . /home/backup/" ssh-dss AAA...
- rsyncを実行
sudo rsync -vv -az -e "ssh -i /root/.ssh/rsync" root@remote.example.com:/home/backup/ /home/backup/
参考:
http://www2s.biglobe.ne.jp/~nuts/labo/inti/cron-rsync-ssh-nodaemon.html