VPSのサーバで毎日cronでバックアップしているファイルを自宅のクライアントPC(CentOS6.3)に起動時に自動でSFTPでダウンロードして世代管理するようにする。
サーバでのバックアップは既に動いている。
データベースのバックアップを行った後、/homeディレクトリとweb用ディレクトリをバックアップし、全てをGnuPGコマンドで暗号化している。
バックアップ方法参考サイト:CentOSで自宅サーバー構築「自動バックアップ運用(tar+GnuPG+rsync/ftp)」
まず、sftpが使用できるようにクライアントで設定
公開鍵認証をするためにsftp接続用を使用者を指定する。
鍵のペアの作成
$ cd .ssh/
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ユーザ名/.ssh/id_rsa):id_rsa_backup 鍵の名前
Enter passphrase (empty for no passphrase): パスワードはなしとするので空Enter
Enter same passphrase again: もう一度同じ空Enter
Your identification has been saved in /home/ユーザ名/.ssh/id_rsa_backup.
Your public key has been saved in /home/ユーザ名/.ssh/id_rsa_backup.pub.
The key fingerprint is:
c8:8f:9e:9d:2d:19:52:9e:91:a6:50:e5:98:da:50:20 ユーザ名@ホスト名 公開鍵の指紋
公開鍵をサーバへ登録
サーバへどうにかしてid_rsa_backup.pubを転送する。
サーバでの設定
ユーザの.sshディレクトリにあるauthorized_keysファイルに公開鍵を追加登録する。
$ cat id_rsa_backup.pub >> ~/.ssh/authorized_keys
次に特定のホスト(クライアント)からのみログインを許可するための設定を追加する。
$ vi ~/.ssh/authorized_keys
from=”ホスト名” ssh-rsa …‥略 追加した公開鍵の行の先頭に追加
# echo “IPアドレス ホスト名” >> /etc/hosts 管理者権限でhostsファイルに許可するクライアントを追加
クライアントからsftpでサーバに接続できることを確認する。
$ sftp -i ~/.ssh/id_rsa_backup ユーザ名@ホスト名
Connected to ホスト名
sftp> 接続できた
sftp> quit ログアウト
$ プロンプトに戻った
クライアントにバックアップファイルを保存しておく/home/backupディレクトリにスクリプトを作成する。
sftpコマンドを実行するためのバッチファイル
$ vi sftp_backup.scr
get /backup/backup.tar.bz2.gpg
quit
バックアップを実行するシェルスクリプト
$ vi sv_backup.sh
#!/bin/bash
#
# サーバのバックアップファイルをダウンロード
#
# バックアップ先ディレクトリ名
BACKUPDIR=/home/backup
# バックアップ保存世代数
# 当日分を含めた過去分バックアップを保存する世代数
# 過去分バックアップを保存しない場合は1を指定する
BACKUPGEN=2
# バックアップログファイル名
BACKUPLOG=/home/backup/backup.log
# 既存バックアップファイルをリネーム
cd $BACKUPDIR
OLDBACKUPFILE=`ls backup.tar.bz2.gpg 2>/dev/null`
if [ -f $OLDBACKUPFILE ]; then
TIMESTAMP=`ls –full-time $OLDBACKUPFILE|awk ‘{print $6}’|tr -d -`
mv $BACKUPDIR/$OLDBACKUPFILE $BACKUPDIR/${TIMESTAMP}$OLDBACKUPFILE > /dev/null 2>&1
fi
# バックアップログファイル作成
rm -f $BACKUPLOG
touch $BACKUPLOG
chmod 600 $BACKUPLOG
echo “`date` backup download start” >> $BACKUPLOG
# sftp接続
sftp -i ~/.ssh/id_rsa_backup -b $BACKUPDIR/sftp_backup.scr ユーザ名@ホスト名 >> $BACKUPLOG
echo “`date` backup download end” >> $BACKUPLOG
# バックアップ保存世代を超えた古いバックアップを削除
if [ $(ls $BACKUPDIR/*backup.tar.bz2.gpg|wc -l) -gt $BACKUPGEN ];then
OLDBACUPCNT=`expr $(ls $BACKUPDIR/*backup.tar.bz2.gpg|wc -l) – $BACKUPGEN`
for file in `ls -t $BACKUPDIR/*backup.tar.bz2.gpg|tail -n $OLDBACKUPCNT`
do
rm -f $file
done
fi
スクリプトファイルに実行権限を付加する。
# chmod 700 sftp.scr sv_backup.sh
作成したバックアップスクリプトをクライアントの起動時に自動実行させる。
システム起動の最後に実行されるシェルスクリプトファイル/etc/rc.localの最終行に追加する。
# vi /etc/rc.local 管理者権限で編集
/home/backup/sv_backup.sh バックアップ実行シェルスクリプトの追加
普段はスタンバイ状態にしているのでスタンバイ復帰後に実行できるようにしたいんだけど…。