rsyncでバックアップするだけの接続を許可する
バックアップを保存するサーバ(以下バックアップサーバ)からバックアップしたいデータがあるサーバ(以下対象サーバ)にrsyncで安全に接続したいが、バックアップサーバから対象サーバをフル操作させるのはいや、というときにどうすればいいかを調べた。
とりあえずこれを見つけたのだが、説明不足で具体的になにやってるのかがさっぱり。
/usr/bin/rsync --server --daemon --config=$HOME/etc/rsyncd.conf .
とかどこから出てきたのかさっぱりだし。
また対象サーバが非rootという制限もあったのだが、その辺行けるかも不明だった。man rsync
を軽く漁った感じだとポートは873だとかいう話だし。
仕方ないのでいろいろ自分で調べた。まだいまいち理解しきれていないが、とりあえずメモっておく。
バックアップサーバから
rsync --rsh=ssh HOSTNAME::MODULE_NAME BACKUP_DIR
あるいは、
rsync --rsh=ssh rsync://HOSTNAME/MODULE_NAME BACKUP_DIR/
を実行する場合、
ssh HOSTNAME rsync --server --daemon .
上記のコマンドで接続される。ので、
rsync --server --daemon .
部分をauthorized_keysで許可すればいいという話。この接続コマンドは、rsyncに-vv
渡して試せば確認できる。
そして対象サーバ側には、~/rsyncd.conf
を以下のような感じで用意しておく。
use chroot = no [MODULE_NAME] path = /path/to/backup
use chroot = no
は非rootだと必須。path
で指定した先を、MODULE_NAMEの名前でバックアップできるという形。
デフォルトでリードオンリなので、対象サーバをデーモン化して、バックアップサーバからpullしてくる分にはこれだけでいい。
なおポート問題は、SSH経由でつなぐ場合はそもそも関係ないっぽい。
さらなる詳細は、man rsync
, man rsyncd.conf
あたりに載っているが、とりあえずこれだけわかれば使えそう。