異なるサーバー間でデータの同期(バックアップ)をとる。
その際、root ユーザーで rsync を行うが、できる限りセキュリティーを高めたい。
具体的には、
という設定を行います。
今回は例として、
サーバーA<SRC>のディレクトリ「/aaa/bbb/ccc」を、サーバーB<DEST>の「/xxx/yyy/zzz/」配下に同期(バックアップ)します。
同期が完了すると、サーバーB<DEST>に「/xxx/yyy/zzz/ccc」として「ccc」ディレクトリとその中身のデータが保存されることになります。
下記は略式図となります。
サーバーB<DEST>からサーバーA<SRC>に対して、データを取りに行くイメージです。
なお、設定作業の流れですが、以下の4段階に別れます。
サーバー A と B を行ったり来たりしますのでご注意ください。
1. サーバーA<SRC>の設定①
2. サーバーB<DEST>の設定
3. サーバーA<SRC>の設定②
4. サーバーB<DEST>で確認
これ以降は、サーバー A , B ともに、root ユーザーになって作業する前提です。
(パスワード認証を拒否する設定)
# vi /etc/ssh/sshd_config : PermitRootLogin without-password :
# /etc/init.d/sshd reload
root ユーザーの authorized_keys を開き、公開鍵の先頭に from= の項目を追加します。
# vi /root/.ssh/authorized_keys from="xxx.xxx.xxx.xxx" ssh-rsa AAA..........
from=“xxx.xxx.xxx.xxx” |
---|
xxx.xxx.xxx.xxx の部分は、サーバーB<DEST>の IP アドレスを指定します
# vi /root/.ssh/config Host SRC_HOST HostName yyy.yyy.yyy.yyy user root IdentityFile /root/.ssh/<SRC_KEY>
SRC_HOST |
---|
SRC_HOST というエイリアス名である必要はありません。
ご自身で分かりやすい名前を付けてください。
yyy.yyy.yyy.yyy |
---|
サーバーA<SRC> の IP アドレス or ドメイン名
/root/.ssh/<SRC_KEY> |
---|
サーバーA<SRC>の root ユーザーの秘密鍵
# ssh SRC_HOST
# rsync -avn --delete SRC_HOST:/aaa/bbb/ccc /xxx/yyy/zzz/
-avn |
---|
-n はドライランの指定です(本番実行で実際に同期を取るときは n を外し、-av とします)
–delete |
---|
完全な同期(差分なし)をとる場合は –delete を指定します。
サーバーAで削除されたデータであっても、サーバーBでは残しておきたい場合は、–delete を指定しません。
先ほど試したドライランのコマンドに -e 'ssh -v' を追加します。
# rsync -avn --delete -e 'ssh -v' SRC_HOST:/aaa/bbb/ccc /xxx/yyy/zzz/ : debug1: Sending command: rsync --server --sender -vlogDtpre.iLs . /aaa/bbb/ccc :
すると、上記のように「debug1: Sending command: …」から始まる行が出力されるので、メモ(クリップボードにコピー)しておきます。
今回の場合は、
rsync –server –sender -vlogDtpre.iLs . /aaa/bbb/ccc |
---|
になります。
次に再びサーバーA<SRC>の設定に移ります。
(※この設定を行っても su で root になった場合はすべてのコマンドを発行できます)
# vi /root/.ssh/authorized_keys from="xxx.xxx.xxx.xxx",command="rsync --server --sender -vlogDtpre.iLs . /aaa/bbb/ccc" ssh-rsa AAA...
authorized_keys を開き、先ほど追加した from= の次に command= を追加します。
from= との区切り文字は ,(カンマ)です。
Wクォーテーション内の文字列は、前項でメモ(クリップボードにコピー)した下記の文字列です。
rsync –server –sender -vlogDtpre.iLs . /aaa/bbb/ccc |
---|
これを指定することで、リモートからログインしてきた root ユーザーのコマンド発行を rsync に限定することができます。
# ssh SRC_HOST
# rsync -av --delete SRC_HOST:/aaa/bbb/ccc /xxx/yyy/zzz/
ドライランの n を外して -av とし、サーバーA<SRC>のデータが同期(バックアップ)できるか確認します。
問題なければ、一連の rsync の設定は完了です。
必要であれば rsync コマンドを cron に登録するなどして、定期的に rsync する環境を作ります。
すべての作業を行うことで上記3つの設定が適用され、セキュリティーがある程度確保されたデータの同期(バックアップ)環境が構築できます。