
lsyncdを使って、ファイル同期(rsync)したい時に、同期先でsudoしたい場合があります!(ownerを同期元と合わせたいとか)
そういう時に、rootじゃなく一般ユーザーでsudoを使って、実現する方法です!
lsyncd使う手順はいくつか見つかるし、
「セキュリティのために、一般ユーザーでsudoやるといいよ!」って書いてある割にはやり方が書いてない!ってことで。
自分のメモ用に残しておこうと思います!
もくじ
前提条件
- OSはAmazon Linux(たぶんほかのLinuxでも大丈夫かと)
- EPELリポジトリを利用(lsyncd インストールのため)
- sudo使う
- sshは「パスフレーズなし」
手順
- rsyncのインストール
- 「パスフレーズなし」のssh-keyを作る
- ssh pubkeyの配置
- (同期先) sudo の設定
- (同期元のみ) lsyncdのインストール(EPEL)
- (同期元のみ) lsyncdの設定
rsyncのインストール
本当はAnsibleでやっているんだけど、とりあえず手順rsyncが必要なので、入れます!
1 | sudo yum install rsync |
「パスフレーズなし」のssh-keyを作る
- キーペアを作成
1 | ssh -keygen -b 2048 |
- ログ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Generating public /private rsa key pair. Enter file in which to save the key ( /home/snicker_jp/ . ssh /id_rsa ): . /rsync .pem Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in . /rsync .pem. Your public key has been saved in . /rsync .pem.pub. The key fingerprint is: 07:84:a5:90:cb:ea:81:d4:2e:02:7e:9b:XX:XX:XX:XX snicker_jp@localhost The key's randomart image is: +--[ RSA 2048]----+ | .. oo | | ...o | | o. .. . | |.E .o . | |+.+. S . | |o+oo . | |..+.* | | .= o | | . | +-----------------+ |
ssh pubkeyの配置
- 公開鍵の配置
1 | ssh -copy- id -i . /rsync .pem.pub user@remote_host |
(同期先)sudo の設定
- 同期先でsudoが使えるようにします!(今回はrsyncユーザーを使いました)
(参考設定)
1 2 | Defaults: rsync !requiretty rsync ALL= NOPASSWD: /usr/bin/rsync |
(同期元のみ) lsyncdのインストール(EPEL)
- EPELのリポジトリを使ってインストール
1 | sudo yum install lsyncd --enablerepo=epel |
(同期元のみ) lsyncdの設定
- /etc/lsyncd.conf (今回のキモ!)
(参考設定)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | settings { logfile = "/var/log/lsyncd/lsyncd.log" , statusFile = "/var/log/lsyncd/lsyncd-status.log" , statusInterval = 20 } sync { default. rsync , delay = 0, source = "/var/www/html" , target= "rsync@192.168.100.100:/var/www/html/" , rsync = { archive = true , rsync_path = "sudo /usr/bin/rsync" , rsh = "ssh -i /home/rsync/.ssh/rsync.pem -o StrictHostKeyChecking=no" } } |
ここの部分がキモですかね!
rsync_path = "sudo /usr/bin/rsync",rsyncをよくわかっている方なら、すぐできたんでしょうが。。。
よく知らなかったものでw
まとめ
- rsync_pathオプションが要です!
- lsyncdで、rsyncするときに「root」を使わなくてよくなりました!
- これで、パーミッション揃えられます!!(^o^)