rsyncコマンドとcronを使ってファイルの自動同期をおこなう場合は以下の手順を踏めばOK。
イメージとしてはこのようなカンジ。
接続はSSH
サーバAとサーバBはSSHで接続するので、サーバAからサーバBへSSHログインする際には公開鍵認証によるパスワード無し認証を設定します。そうしないとパスワードを聞かれてしまいSSH接続が失敗してrsync自体がタイムアウトして終了してしまいます。
公開鍵認証の設定方法
※ここではSSHユーザはhogeとします。
①サーバA/home/hoge/.sshにて、秘密鍵[rsync-rsa]と公開鍵[rsync-rsa.pub]のペアを作成する
1 2 |
cd /home/hoge/.ssh ssh-keygen -t rsa -N '' -f /home/hoge/.ssh/rsync-rsa |
※パスフレーズ無しの鍵を作成します。
②サーバA側のSSHに関連するディレクトリおよびファイルのパーミッションを適切に設定する
/home/hogeディレクトリのパーミッションをrwx——にしておく。
1 2 |
cd /home chmod 700 /home/hoge |
/home/hoge/.sshディレクトリのパーミッションをrwx——にしておく。
1 2 |
cd /home/hoge chmod 700 /home/hoge/.ssh |
/home/hoge/.ssh/rsync-rsaのパーミッションをrw——-にしておく。
1 2 |
cd /home/hoge/.ssh chmod 600 /home/hoge/.ssh/rsync-rsa |
③サーバA側で作成した公開鍵をサーバB側に登録する
サーバA側で作成した/home/hoge/.ssh/rsync-rsa.pubをサーバBの/home/hoge/.sshディレクトリへコピーする。(コピーはscpコマンド、WinScp等、なんでも良い)
サーバB側の/home/hoge/.ssh/authorized_keysにrsync-rsa.pubの内容を追加する。
1 2 |
cd /home/hoge/.ssh cat rsync-rsa.pub >> authorized_keys |
※rsync-rsa.pubに書かれている内容をauthorized_keysに追記すれば良いので、Windows側に必要なファイルを持ってきて、直接ファイルを開いて内容をコピー&ペーストして、サーバへ戻す方法でも良い。
④サーバB側のSSHに関連するディレクトリおよびファイルのパーミッションを適切に設定する
/home/hogeディレクトリのパーミッションをrwx——にしておく。
1 2 |
cd /home chmod 700 /home/hoge |
/home/hoge/.sshディレクトリのパーミッションをrwx——にしておく。
1 2 |
cd /home/hoge chmod 700 /home/hoge/.ssh |
/home/hoge/.ssh/authorized_keysのパーミッションをrw——-にしておく。
1 2 |
cd /home/hoge/.ssh chmod 600 /home/hoge/.ssh/authorized_keys |
⑤サーバAからサーバBへSSH接続して、鍵による認証が行われているか確認する
サーバA上にてSSH接続コマンドを実行する。
1 |
ssh -i ~/.ssh/rsync-rsa [サーバBのIPアドレスまたはホスト名] |
コマンドプロンプトが表示されればOK。
※この時点でパスワードの入力を促されたら、鍵による認証が失敗しているということになるので、パーミッションの設定等を再度見直す。
1 2 |
ssh -i ~/.ssh/rsync-rsa [サーバBのIPアドレスまたはホスト名] [hoge@サーバB ~]$ |
SSH切断はexitでできます。
1 |
[hoge@サーバB ~]$exit |
⑥サーバA側にcronによるrsyncコマンドの自動起動の設定を行う
crontabの編集コマンドを実行する。
1 |
crontab -e |
※crontab -lだと現在設定されている内容をリスト表示する(編集はできない)
※crontab -rは全ての設定を消去してしまうため要注意。(eとrのキーは隣同士なので打ち間違えのないように)
上記コマンド実行後はviによるcrontabの編集が可能になるのでrsyncの設定を記述。
1 |
15 0 * * * /usr/bin/rsync -av --bwlimit=400 -e "ssh -i /home/hoge/.ssh/rsync-rsa" hoge@[サーバBのIPアドレスまたはホスト名]:/home/hoge/data/ /home/hoge/data/ |
※サーバBの/home/hoge/data/以下のファイル全てをサーバAの/home/hoge/data/以下にコピーしている。
※–bwlimit=400 オプションは帯域を多く使いすぎてサーバ負荷を高くしないように帯域制限している。
うまく動かない原因は結構単純ミスが多いです
以上で設定は終了です。cronにrsyncの設定を書いたは良いけれどうまく動かないケースは結構見受けられますが、大体がパスワードなしSSH接続が失敗しているのが原因のようです。また公開鍵認証を設定したけれどうまくいかない場合はSSH関連のディレクトリやファイルのパーミッションが正しく設定されていないケースをあるようですので、うまくいかない場合は両サーバのパーミッションを今一度見なおしてみてください。