ミラーリング(rsync)
遠隔地にあるサーバ一部と私のサーバ間でミラーリングする必要が出てきました。
同期は、1日に1回行えばよく特に時間の指定もありません。
ただし、データの転送は暗号化されている必要があります。
1.5ヶ月程度の暫定処置ですが、毎日手動でコピーするのも芸がありません。
自動で、サーバ間の同期が取られるように設定します。
これらの条件を満たすシステム構成として、下記組み合わせを使います。
ssh+rsync+cron
ssh関連の設定
sshでの認証方法は下記の3つがあります
- パスワード認証
PasswordAuthentication (SSH1, SSH2)
- 公開鍵認証
PubkeyAuthentication (SSH2)
RSAAuthentication (SSH1)
- ホストベース認証
HostbasedAuthentication (SSH2) RhostsRSAAuthentication (SSH1)
パスワード認証は、自動化の観点から不向きです。
(パスワード入力待ち状態になられると困る)
パスフレーズを使用しない「公開鍵認証」か「ホストベース認証」のどちらかを選択します。
筆者は、パスフレーズを使用しない「公開鍵認証」方式で実施することにしました。
例によって、これと言った根拠のない選択ですJ
(信頼される2者間のミラーリングであれば「ホストベース認証」の方が、好ましいのかも知れません)
root の ssh ログインでは、/root/.ssh/authorized_keys の command="〜〜"
オプションに指定されたコマンドを実行させることができます。
ミラー化には、この機能を使います。
ミラー先(ヨッパサーバ)の設定を下記のようにして、rootのコマンドログインを許可します。
<変更ファイル:/etc/ssh/sshd_config>
変更前 |
変更後 |
PermitRootLogin no |
PermitRootLogin forced-commands-only |
鍵の作成
ssh-keygen を使いパスフレーズを使用しない鍵を作成します
この操作はミラー元で行っています。
# ssh-keygen -t dsa -N "" -f /root/.ssh/key_Private
Generating public/private dsa key pair.
Your identification has been saved in /root/.ssh/key_Private.←秘密鍵ファイルができる(パーミッションを600にする)
Your public key has been saved in /root/.ssh/key_Private.pub.←公開鍵ファイルができる
The key fingerprint is:
9f:d5:c8:58:76:22:cb:9e:8d:d8:8d:d8:4a:38:49:8b
root@xxxxx
/root/.ssh/key_Private.pub(ミラー元) を /root/.ssh/authorized_keys と名前を変えてミラー先(ヨッパサーバ)にコピーします。
このときに、下記のように先頭に commandオプションを記述しておきます。
command="rsync --server -logDtprz .
/home/mirror/" ssh-dss AAAAB3NzaC1kc3MAAACBAJZCZKH〜〜〜〜〜 |
このように記述したファイルを /root/.ssh/authorized_keys に設置することで、root が ssh でログインしたとき、command を実行します。
rsyncオプションの意味
rsync のオプションに --server -ulogDtprz を指定していますが、どのようにして決めたのでしょうか?
これは、実際に rsync を詳細情報表示(パラメータ:vv)で実行させて、パラメータを確認しました。
<実行画面>
# rsync -vv -az -e "ssh -i /root/.ssh/key_Private.ppk"
/home/mirror/ root@alk.dip.jp:/home/mirror/
opening connection using ssh -i /root/.ssh/key_Private.ppk
-l root alk.dip.jp rsync --server -vvlogDtprz . /home/mirror/
The authenticity of host 'alk.dip.jp (219.122.218.99)'
can't be established.
RSA key fingerprint is 9c:73:07:36:49:52:a9:26:1f:e1:22:1c:1f:09:f8:31.
Are you sure you want to continue connecting
(yes/no)? no
Host key verification failed.
rsync: connection unexpectedly closed (0
bytes read so far)
rsync error: error in rsync protocol data
stream (code 12) at io.c(150)
上記の赤文字が、ミラー先(ヨッパサーバ)で実行されたコマンドです。
(実行されるコマンドを見たいだけなので、rsync は失敗させています)
実際の運営では、詳細情報表示は必要がありません。
vv のパラメータを外したコマンドを command パラメータとして authorized_keys に記述しました。
使用オプション |
意 味 |
-v |
詳細情報の表示 |
-l |
ソフトリンクを維持する |
-o |
オーナーを維持する (root のみ) |
-g |
グループを維持する |
-D |
デバイスを維持する (root のみ) |
-t |
タイムスタンプを維持する |
-p |
パーミッションを維持する |
-r |
ディレクトリで再帰的に実行する |
-z |
受信ファイルを圧縮 |
詳細な意味については、マニュアルを参照してください。
ミラー化
ミラー先(ヨッパサーバ)の準備が終了したので、実際にミラー化を実行します。
<ミラー元での実行>
# rsync -vv -az -e "ssh -i /root/.ssh/key_Private"
/home/mirror/ root@alk.dip.jp:/home/mirror/
opening connection using ssh -i /root/.ssh/key_Private
-l root alk.dip.jp rsync --server -vvlogDtprz
. /home/mirror/
The authenticity of host 'alk.dip.jp (219.122.218.99)'
can't be established.
RSA key fingerprint is 9c:73:07:36:49:52:a9:26:1f:e1:22:1c:1f:09:f8:31.
Are you sure you want to continue connecting
(yes/no)? yes ←相手先が初めての接続の為、確認待ちになる。2回目以降は聞かれない
Warning: Permanently added 'alk.dip.jp,219.122.218.99'
(RSA) to the list of known hosts.
building file list ...
expand file_list to 4000 bytes, did move
done
ここからファイルのコピーが始まる
:
:
:
total: matches=0 tag_hits=0 false_alarms=0
data=3254356
wrote 1745471 bytes read 852 bytes 151854.17
bytes/sec
total size is 3254356 speedup is 1.86
#ミラー化終了
cronへの登録
# crontab -e ←cronへの登録
<登録内容>
0 4 * * * /usr/bin/rsync -az -e "ssh
-i /root/.ssh/key_Private" /home/mirror/
root@alk.dip.jp:/home/mirror/
これで毎朝4時に、サーバー間の同期がとられます。
|