rsync+ssh+cronで自動バックアップ

どこでも結構書いてあるネタだけどとりあえず。

環境

  • LOCAL SERVER(コピー元)

Hostname: LOCAL
OS: Debian Linux 2.6.8-1

  • REMOTE SERVER(コピー先)

Hostname: REMOTE
OS: Gentoo Linux 2.6.22-gentoo-r2

前提条件

  • バックアップ環境はClosedの為、外部からのアクセスを考えてません。
  • セキュリティもあまあま(sshはつかったほうが自動化が簡単そうだったから)

LOCAL側での作業

  • 鍵置き場作成

# mkdir /root/.ssh
# chmod 700 /root/.ssh

  • パス無しのSSH鍵を作成

# (sudo)ssh-keygen -t dsa -N "" -f /root/.ssh/rsync

コマンド実行が終わると/root/.ssh/rsyncrsync.pubが作成される
SSH v2なのでdsa必須・-N ""でパス無しに

  • REMOTE側へ共有鍵をコピー

# scp /root/.ssh/rsync.pub root@REMOTE:/root/.ssh/authorized_keys

*1

  • 動作確認(rsync実行)

# rsync -vvrlpogt -e "ssh -i /root/.ssh/rsync.new" /LocalBackupdir/ REMOTE:/RemoteBackupdir/

  • cronへの入力

# crontab -e

0 1 * * * rsync -rlpogt -e "ssh -i /root/.ssh/rsync" /LocalBackupDir/ REMOTE:/RemoteBackupDir/

この場合は毎日AM1:00にrsyncを実行し、LOCALからREMOTEへコピーを実行。詳細はcrontabのマニュアルでもみてください。

REMOTE側での作業

  • 鍵置き場作成

# mkdir /root/.ssh
# chmod 700 /root/.ssh

初期設定でsshdさえ動作していれば特にやることは無し。
もしもアクセスできないようであれば

# vi /etc/ssh/sshd_config

PermitRootLogin yes

に変更して、/etc/init.d/sshd restart

メモ:セキュリティ向上させたい場合(未試行)

コマンドを制限する

  • REMOTE側のsshd_config内のPermitRootLoginを以下のように変更

PermitRootLogin forced-commands-only

  • その後、authorized_keys内の先頭に以下を記述

command="ssh -i /root/.ssh/rsync REMOTE rsync --server -vvlogtpr . /Backupdir/"

上記コマンドはrsyncを-vvオプション付きで実行したときに最初にでてくる内容をコピペするしたもの。

*1:コピペする場合は改行に気をつけてください