rsyncでバックアップするだけの接続を許可する

バックアップを保存するサーバ(以下バックアップサーバ)からバックアップしたいデータがあるサーバ(以下対象サーバ)にrsyncで安全に接続したいが、バックアップサーバから対象サーバをフル操作させるのはいや、というときにどうすればいいかを調べた。

とりあえずこれを見つけたのだが、説明不足で具体的になにやってるのかがさっぱり。

qa.atmarkit.co.jp

/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あたりに載っているが、とりあえずこれだけわかれば使えそう。