スタッフブログ
最近、必要に追われてサーバをいじっている時間が増えているgusagiです
今日は、掲題のとおりrsyncに関連した記事を書こうと思います。
複数台のサーバを管理していると、所有者がrootのファイルを別のサーバにrsyncする必要が出てきたりします。
このとき、SSHなどでrootがログイン出来るように設定されているサーバの場合は特に面倒はないのですが、セキュリティの関係などもあってrootがSSHログイン出来る環境は早々ないと思います。
ググってみたところ、こちらのブログのように「同期元のサーバ(以下、元サーバ)から同期先のサーバ(以下、先サーバ)にファイルを送る」形で同期させれば何とかなりそうだったのですが、幾つかの理由から「先サーバから元サーバにファイルを受け取りに来る」形だったので、ちょっとばかり手こずってしまいました。
最終的に、mixiでマイミクの方にアドバイスを頂いたりしながら色々と試したところ、何とか実現出来たので書いてみます。
今日は、掲題のとおりrsyncに関連した記事を書こうと思います。
複数台のサーバを管理していると、所有者がrootのファイルを別のサーバにrsyncする必要が出てきたりします。
このとき、SSHなどでrootがログイン出来るように設定されているサーバの場合は特に面倒はないのですが、セキュリティの関係などもあってrootがSSHログイン出来る環境は早々ないと思います。
ググってみたところ、こちらのブログのように「同期元のサーバ(以下、元サーバ)から同期先のサーバ(以下、先サーバ)にファイルを送る」形で同期させれば何とかなりそうだったのですが、幾つかの理由から「先サーバから元サーバにファイルを受け取りに来る」形だったので、ちょっとばかり手こずってしまいました。
最終的に、mixiでマイミクの方にアドバイスを頂いたりしながら色々と試したところ、何とか実現出来たので書いてみます。
所有者がrootの /usr/local/etc/pkgtools.conf をrsyncするサンプル
前提条件
元サーバ:sudoers
先サーバ:/home/gusagi/rsync.sh
先サーバ:/home/gusagi/syncer.sh
上記のファイルを元サーバ・先サーバに保存して、先サーバのgusagiのcrontabにsyncer.shを登録すれば、意図したとおりにpkgtools.confが同期されるはずです。
私の場合、元サーバのイメージをコピーして先サーバを構築することを前提としていたので、syncer.shの最初に「元サーバだったら処理を終了する」という分岐を追加した上で、どちらのファイルも元サーバに保存し、元サーバでcron設定まで行っています。
前提条件
- 元サーバ:from.example.com
- 先サーバ:to.example.com
- rsyncを実行するユーザは一般ユーザgusagiとする
- 一般ユーザgusagiは、元サーバ・先サーバの両方に存在している
- 一般ユーザgusagiは、パスフレーズ無しのsshログインが設定されている
- sshd_configの"PermitRootLogin"は、"no"に設定している
- rsyncに限定して、sudoを許可している
元サーバ:sudoers
gusagi ALL=(ALL) NOPASSWD: /usr/local/bin/rsync
先サーバ:/home/gusagi/rsync.sh
#!/bin/sh
# set PATH
PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:${PATH}
export PATH
# rsync call with sudo
sudo rsync $*
先サーバ:/home/gusagi/syncer.sh
#!/bin/sh
# set PATH
PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:${PATH}
export PATH
# init process
TARGET_HOST="from.example.com"
CURRENT_HOST=`hostname`
RSYNC_SH="/home/gusagi/rsync.sh"
# rsync pkgtools.conf
PKGTOOLS_CONF="/usr/local/etc/pkgtools.conf"
ssh ${TARGET_HOST} rsync -apz --rsync-path="${RSYNC_SH}" \
-e ssh ${PKGTOOLS_CONF} ${CURRENT_HOST}:${PKGTOOLS_CONF}
上記のファイルを元サーバ・先サーバに保存して、先サーバのgusagiのcrontabにsyncer.shを登録すれば、意図したとおりにpkgtools.confが同期されるはずです。
私の場合、元サーバのイメージをコピーして先サーバを構築することを前提としていたので、syncer.shの最初に「元サーバだったら処理を終了する」という分岐を追加した上で、どちらのファイルも元サーバに保存し、元サーバでcron設定まで行っています。