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