rsync+ssh

最終更新日時:2014-03-17 00:00:00
OpenSSH rsync

rsync と ssh を組み合わせることにより、強力なバックアップツールとなります。
rsync 自体がそもそも強力な機能を持っているのですが、rsh の使用を前提にしているのでセキュリティ的に問題があります。
その問題の部分を ssh を使用することにより補い、さらに ssh がファイアウォール等を跨いでの接続を前提とされていることを利用し、LAN 内だけでなくインターネットを経由しての rsync が可能となります。

以下、OpenSSH と rsync が既にインストール済みであり、さらに、クライアント側からサーバ側への SSH 接続が可能である環境を前提とします。

手動バックアップ


以下を実行すると、実行したマシン上の /backup ディレクトリの内容を server マシン上の /backup/client 上にバックアップ(ミラー)します。
もちろん、ssh user@server で server マシンに SSH 接続が可能であることが必要です。

 % rsync -avz -e ssh /backup/ user@server:/backup/client/


rsyncの各オプションについてはrsyncのメモを参考にしてください。

cron でバックアップ


バックアップはやはり自動的に定時実行させたいものです。
これには cron から rsync + ssh を呼び出すよう設定すればよいのですが、普通の状態で上記のコマンドを crontab に設定してもパスフレーズを毎回聞かれてしまうので、バックアップに失敗します。
従って、パスフレーズを聞かれないように実行することを考えます。
パスフレーズを聞かれないようにする方法はいくつかあるのですが、ここでは一番手っ取り早いと思われるパスフレーズ無しの鍵を作る方法を紹介します。
以下のようにして鍵を作成すると、パスフレーズ無しの鍵が作成できます。

 % ssh-keygen -t rsa -N "" -f ~/.ssh/backup


上の例では、.ssh 以下に backup というファイル名でパスフレーズ無しの RSA 鍵を作成しています。
上記で作成した公開鍵をサーバ側の authorized_keys2 に追加します。
ただし、セキュリティ面を考えると、通常使用するユーザの authorized_keys2 ではなく、バックアップ専用のユーザを作成し、そのユーザの authorized_keys2 に追加しておくべきでしょう。
さらに、authorized_keys2 の先頭で command 指定をして、実行可能なコマンドを制限させるとセキュリティ的に安全です。
設定したら下のような感じで rsync を実行して、パスフレーズが聞かれることなくバックアップされることを確認します。

 % rsync -avz -e "ssh -i /home/username/.ssh/backup" backup@server:/backup/client/ /backup/


確認が出来たら上記のコマンドを crontab に設定しましょう。


バックアップ用のssh接続のコマンドを限定する


上記の状態だと、バックアップ用の鍵ファイルでも全てのコマンドが実行できてしまいます。
バックアップ用の鍵でログインした際には、バックアップに必要なコマンドだけが実行できる状態に制限しておくと安全度が増します。

まずは、バックアップ実行の際に実行している rsync のコマンドに -vv を付けて実行してみます。
※実際に rsync によるファイル同期も実行されますので注意

 % rsync -vv -avz -e "ssh -i /home/username/.ssh/backup" backup@server:/backup/client/ /backup/


すると、

 opening connection using: ssh -i /home/username/.ssh/backup -l backup server rsync --server -vvvlogDtprze.iLs . /backup/


のような行が表示されます。
上記の rsync 以下のコマンドがリモート上で実行されるコマンドとなりますので、これを authorized_keys に記述します。

 command="rsync --server -vvvlogDtprze.iLs . /backup/" ssh-rsa AAAA...


という感じですね。
設定したら、実際に手動で rsync と ssh によるログインを実行して動作を確認しておきましょう。

お問い合わせは 掲示板 にて。