前提
- リモートマシン名: remote
- ユーザ名:foo(リモート、ロカールとも)
- ローカルでssh-agentを使用。リモートマシンにはパスフレーズ入力なしでsshログイン可能にしておく(rsyncはデフォルトでリモート接続にsshを使用するため)
- リモートもローカルも、rsyncをパスワードなしでsudo可能にしておく (ローカル側はパスワードの手入力可能かもしれないが未検証)
リモートマシンで自分が所有するホームディレクトリ上のworkディレクトリ以下をローカルのwork.backupにバックアップ
rsync -avzPi remote:work/ work.backup引数の概要
- a: パーミッション、所有者、タイムスタンプなどの属性を維持
- v: 詳細メッセージ表示
- z: データを圧縮(ネットワークが広帯域の場合、付与しないほうが良いケースあり)
- P: 進捗を表示
- i: 更新されている属性を表示
リモートのroot権限でのみ読み取り可能な/eggplantディレクトリ以下をローカルの/eggplant.backupにバックアップ
sudo -E rsync --rsync-path="sudo rsync" -avzPi foo@remote:/eggplant/ /eggplant.backup
- 最初のsudoは、ローカルでrootのみが書き込み可能なディレクトリ/eggplant.backup以下にバックアップするため。またファイルの所有者が自ユーザ以外の場合、そのユーザに変更するためにも必要
- sudoの引数-Eは、ssh-agentをsudoしたあとも有効にする(sshコマンドは、通信すべきssh-agentプロセスを環境変数から知るため)
- --rsync-path="sudo rsync"は、リモート側のrsyncをroot権限で起動する。リモート側で所有者がrootであっても、fooユーザで読み取り可能な場合は不要