rsyncをsuで実行

host1からhost2へディレクトリ構造をまるごとコピーしたい。以前にもtarを標準出力で流してsshで受け取ってtarで展開なんてことをやっていたんですが、頻繁にやるとなると差分だけ移動したい。ってことでrsyncを利用することに。
rsyncのマニュアルをみるとsshで接続する場合には"-e"でコマンドを指定せよとのこと。それとリモート側でのrsyncコマンドは"--rsync-path"で指定すると。

sshで接続する-eオプションで指定するコマンドに一般ユーザを指定すれば良さそうなので、こんな感じかと。

$ sudo rsync --auvz -e 'sudo -u username ssh -l username' --rsync-path='sudo rsync' object_directory/ host2:/destnation_directory/

host1側のobject_directoryはroot権限じゃないと読めないファイルがあるのでsudoでrsyncを叩く。
sshで接続するところの文字列は一般ユーザ(鍵ペアがちゃんとしているユーザ)を指定してsudoでそのユーザ名で起動。-lはいらないかも。
でもって、host2側の目的ディレクトリはrootじゃないとかけないのでこちらもsudoでrsyncを叩いてもらう。
もちろん両方のサーバでsudoersなんかの調整は必要ですが。
これで一旦コピーしたら、二回目からは差分だけを送ってくれるので同期は数秒で終了します。