rsyncを使ってサーバ間バックアップ

  • cronを使ってrsync, sshで10分毎にバックアップ
  • それぞれのサーバにアカウントrsyncuserを作り、公開鍵認証を利用
  • コピー元 /var/www 配下すべて
  • コピー先サーバの /home/rsyncuser/<コピー元サーバのドメイン名>/var/www/ 配下に保存
  • サーバのsshのポートは10022
  • rsyncuserはコピー元サーバからのみログイン可能にする(鍵漏れ対策)

それぞれのサーバにrsyncuserを作りサーバ間rsync

コピー元サーバ

コピー元サーバにログインする必要はないので、ログインできないユーザとして追加

sudo useradd -s /bin/false rsyncuser

空の鍵作成

$ sudo -u rsyncuser ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rsyncuser/.ssh/id_rsa): (エンター)
Created directory '/home/rsyncuser/.ssh'. (エンター)
Enter passphrase (empty for no passphrase): (エンター)
...

sudo -u rsyncuser mv /home/rsyncuser/.ssh/id_rsa.pub /home/rsyncuser/.ssh/authorized_keys

公開鍵をコピー先サーバへ転送

sudo cp /home/rsyncuser/.ssh/authorized_keys ~/authorized_keys-rsyncuser
scp -P10022  ~/authorized_keys-rsyncuser <転送先サーバ>:
rm -f ~/authorized_keys-rsyncuser

コピー先サーバ

コピー元サーバで作成した公開鍵を、rsyncuserの.sshディレクトリに入れる

sudo useradd rsyncuser
sudo -u rsyncuser mkdir -m 700 /home/rsyncuser/.ssh
sudo mv ~/authorized_keys-rsyncuser /home/rsyncuser/.ssh/authorized_keys
sudo chown rsyncuser:rsyncuser /home/rsyncuser/.ssh/authorized_keys

バックアップを保存するためのディレクトリを作成

sudo -u rsyncuser mkdir -p /home/rsyncuser/<コピー元サーバのドメイン>/var/www

コピー元サーバ

rsyncのテスト /var/www 以下をバックアップ

sudo -u rsyncuser rsync -av -e 'ssh -p10022 -i /home/rsyncuser/.ssh/id_rsa' /var/www/ rsyncuser@<コピー先サーバ>:`hostname`/var/www/
Are you sure you want to continue connecting (yes/no)? yes # yesと入力しエンター

10分毎にrsyncするようにcronにセット

$ sudo -u rsyncuser crontab -e
*/10 * * * * rsync -av -e 'ssh -p10022 -i /home/rsyncuser/.ssh/id_rsa' /var/www/ rsyncuser@<コピー先サーバ>:`hostname`/var/www/

ログイン元を制限

コピー先サーバ

rsyncuserがログインはコピー元サーバに限定

$ sudo vim /etc/ssh/sshd_config
UsePAM yes

$ sudo vim /etc/security/access.conf
- : rsyncuser : ALL EXCEPT <コピー元サーバIP>

$ sudo vim /etc/pam.d/sshd 
#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account  required     pam_access.so      # ここの行を追加
account    include      password-auth
password   include      password-auth

$ sudo service sshd reload

参考