リモートサーバでrsync+sudoでログインユーザに権限のないフォルダを同期させる

前にssh越しにsudo経由でtarを用いるという事をやっていたのだが、今回はrsync。で、rsyncもそうみたいなのだが、ssh越しで擬似端末(tty)を使っての通信できないらしい。こうなると、sshで「-tt」オプションを付けて擬似端末を有効にしての対応は難しいので、CentOSなどのデフォルト(AWSとかAzure上のイメージでは手が入ってるので対象外)だとsudo実行時には擬似端末を要求する指定(Defaults requiretty)を解除する必要があるようだ。ユーザごとに設定もできるのだが、面倒であれば以下のようなコマンドを実行してrequirettyを無効化してしまおう。

ssh -t user@host 'sudo sed -i "/requiretty$/s/^/# /g" /etc/sudoers'
Sponsored Links

疑似端末が要求されないようになったら、あとは以下のようにコマンドを実行することでroot権限が必要になるディレクトリに対するrsyncが行えるようになる。

rsync -auv -e "ssh -i key " --rsync-path="sudo rsync " user@host:/remotedir /localdir

 

で、この時注意したいのがsudo実行時にパスワードが必要な場合。sshコマンドで直接sudoを呼び出しているのと違い、rsync経由でssh接続しているからか、ヒアドキュメントや標準入力を利用してのパスワード入力はちょっと難しいみたい。X11Forwardingを使えるのなら、ssh-askpassを使ってやればなんとかなるようだけど、それ以外の方法はちょっと無さそう。
色々と試してみたけど、基本はやはり/etc/sudoersいじってrequirettyを無効化・NOPASSWDで実行できるようにするのが一番早いようだ。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*