rootログイン禁止による影響

sshd_configでPermitRootLoginをnoに設定してrootログインが禁止されているとき、ssh経由でrsyncを使用すると不都合が起きる。

  1. 相手サーバにsshでログインできないため、rsyncもできなくなる。
  2. root以外でログインしたとしても、同期対象のディレクトリ/ファイルの権限と所有者によっては、読み書き、所有者の変更等ができない。

解決手順

  1. remote側のサーバでrsyncをsudoできるように設定する。

    # visudo
        
    rsync用user ALL=(ALL) NOPASSWD:/usr/bin/rsync
  2. rsync実行部分を修正する。

    rsync -a remoteip:コピー元 コピー先
    ↓
    rsync -a -e 'sudo -u rsync用user ssh -l rsync用user' --rsync-path='sudo rsync' remoteip:コピー元 コピー先
    コマンド 説明 目的
    rsync クライアント側はrsyncをrootで実行する クライアント側で所有者の変更ができるように
    -e 'sudo -u rsync用user ssh -l rsync用user' sshをrsync用userが実行し、かつrsync用userでログインするようにする これがないとrootでログインしようとし、失敗する。
    --rsync-path='sudo rsync' sshでログインした先のrsyncを'sudo rsync'にし、root権限でrsyncできるようにする サーバ側でrsync用userではアクセスできないディレクトリにアクセスできるようにするため

参考
http://d.hatena.ne.jp/JULY/20111127
http://d.hatena.ne.jp/JULY/20130327/p1