テックブログ

技術ネタ

rootでSSHしたくないときのrsync

こんにちは

webデータ等をsshを利用してデータを転送するとユーザ権限絡みの問題が発生することは多いと思います。

[root@aws01 ~]# rsync -avz -e "ssh -i ~/.ssh/aws02.id_rsa" /var/www/html/test001.html test02@192.168.2.84:/var/www/html
sending incremental file list
test001.html
rsync: mkstemp "/var/www/html/.test001.html.FG4708" failed: Permission denied (13)

sent 99 bytes  received 122 bytes  147.33 bytes/sec
total size is 4  speedup is 0.02
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

でもroot ではポリシー的な事情でSSHしたくないってとき、いくつか方法はあると思いますが、今回はrsyncdのPROXYを使う方法を紹介したいと思います。

rsyncd側の設定をぱぱっと書きます。

rootで起動させる必要があります。

[root@aws02 ~]# vi /etc/rsyncd.conf
[root@aws02 ~]# cat /etc/rsyncd.conf
uid = root
gid = root
read only = no
transfer logging = yes
log file = /var/log/rsyncd/rsyncd.log
pid file = /var/run/rsyncd.pid
use chroot = no

[web]
path = /var/www/html
hosts allow = localhost 192.168.1.0/24
hosts deny = *
read only = false

起動させます。

[root@aws02 ~]# systemctl start rsyncd

ncコマンドを利用できるようにします。

[root@aws01 ~]# yum install nc
[root@aws02 ~]# yum install nc

sshconfigでSSHログインできるようにします。

[root@aws01 ~]# vi .ssh/config
Host aws02
     hostname 192.168.2.84
     user test02
     identityfile ~/.ssh/aws02.id_rsa

bash_profileにRSYNC_CONNECT_PROG の変数を追加して、

再ログインします。

[root@aws01 ~]# vi .bash_profile
export RSYNC_CONNECT_PROG='ssh aws02 nc %H 873'

環境変数を確認します。

[root@aws01 ~]# echo $RSYNC_CONNECT_PROG
ssh aws02 nc %H 873

転送します。

[root@aws01 ~]# rsync -avz /var/www/html/ localhost::web
sending incremental file list
./
test001.html

転送されていることを確認します。

[root@aws02 ~]# ll /var/www/html/
total 0
-rw-r--r-- 1 root root 0 Feb  3 07:38 test001.html

転送されていればOKです。

セキュリティ関連の課題はいろいろあると思いますが、選択肢の1つとして参考になれば幸いです。

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください