ここでは、クライアントマシン(Windows)からサーバーマシン(Linux)のファイルをバックアップする運用をrsyncで構築してみます。
以下の環境で構築しました。
cygwinをC:\cygwinにインストールして、以下のディレクトリをWindowsの環境変数PATHに追加しましょう。
パッケージはrsync・opensshを追加。
C:\cygwin\bin
Windowsマシンより、鍵ペアを作成します。
c:\>ssh-keygen -t rsa -N "" <- パスフレーズなし鍵ペア作成 Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub. The key fingerprint is: 94:f4:1d:15:97:33:19:f2:f5:05:14:f0:cc:06:cc:e0 user1@win-client-PC
先ほど作成した、公開鍵(c:\cygwin\home\user1\.ssh\id_rsa.pub)をリモートサーバー(Linux)へセットアップします。
これにより、パスフレーズなしでログイン可能になります。
リモートサーバー側の.ssh/authorized_keysに公開鍵を追加します。
remote@server:~> cd .ssh remote@server:~/.ssh> cat id_rsa.pub >> authorized_keys
それから、パスフレーズなしの公開鍵の先頭にログインを許可するIPアドレスを指定しとく。
remote@server:~/.ssh> vi authorized_keys from="172.19.50.202" ssh-rsa XYZXYZ…
リモート側のファイルをクライアント機(Windows)へバックアップします。
C:\>rsync -ave ssh --delete remote@server:public_html/ \ /home/user1/public_html/
次にrsyncでクライアントPC側のファイルをリモートへバックアップする設定をします。
Windows(Vista)の「ピクチャ」フォルダを丸ごとサーバー側と同期させます。
C:\>rsync -ave ssh --delete /cygdrive/c/Users/user1/Pictures/ \ remote@server:WindowsVista/Pictures/
クライアント機は、常に起動しているわけではないので、起動時にバックアップを取得してくる設定をしておきます。
rsyncは便利なんだけど、知らずに間違った設定をするとバックアップするつもりが、全部のファイルが消失してしまったということにもなりかねないので、注意が必要である。
| オプション | 説明 |
|---|---|
| -a,—archive | アーカイブモード(-rlptgoDオプションと同義) |
| -v,—verbose | 転送情報を詳しく表示 |
| -e ssh | rshの代替としてSSHを指定 |
| -z | データを圧縮して転送 |
| —delete | コピー元で削除されたファイルをコピー先でも削除 |
| —exclude=PTN | パターン(PTN)に一致するファイルを除外する |
| -n,—dry-run | 実行時の動作だけ表示 |
Subversionリポジトリから最新のドキュメントをチェックアウトして、複数のWebサーバーと同期を行うサンプル。
#!/bin/sh
if [ $# -eq 0 ]; then
echo "=================================================================="
echo "USAGE:"
echo " sh $0 <your svn account name>"
echo "=================================================================="
exit 1
fi
## Constant
SVN_ACCOUNT=$1
CHECK_OUT_DIR=_____
SVN_URL=_____
USER_NAME=_____
## SVN
cd ${CHECK_OUT_DIR}
svn checkout ${SVN_URL}/public_html --username ${SVN_ACCOUNT}
if [ $? -ne 0 ]; then
exit 1
fi
## BUILD
for IP in 192.168.0.201 192.168.0.202
do
rsync -avze ssh --exclude ".svn/" --exclude ".svn/*" --delete \
${CHECK_OUT_DIR}/public_html/* \
${USER_NAME}@${IP}:/home/${USER_NAME}/public_html
done