Using sudo on a remote rsync session (via ssh)
I have been using rsync to back up almost a dozen servers for years now and I am convinced that it is the best solution for remote back ups. A couple of months ago I ran into a situation where I need to rely on one of those backups and everything went expected.... well, sort of. All of my data was there and I was able to get things back up and running on a new server in only a few hours but it would have been much quicker if the permissions and file ownership was preserved. Once I got the system back up and running I wanted to make sure my the back up process was going to start preserving the file permissions and ownership. I found that the to accomplish this you absolutely had to be putting the files on the remote server as root. Of course, this is a security concern. The solution was permitting the rsync process to have access to sudo.
Step 1:
On the server that is receiving the back ups you need to add the following line to the /etc/sudoers file (according to Johannes in comments this needs to be the last line -- thanks):
- username ALL= NOPASSWD:/usr/bin/rsync
- rsync -av -e "ssh" --rsync-path="sudo rsync" /source/ user@server.com:/destination/
Labels: backups, keys, rsync, ssh, sudo
Reference Link

3 Comments:
To edit /etc/sudoers file, you can use sudo visudo command
hi Bob,
I tried your suggestion, seems not working, this is what I tried:
From server that is receiving the file:
- sudo visudo
- add the following in the /etc/sudoers:
user ALL=(ALL) NOPASSWD:/usr/bin/rsync
- restart the system manually
From the server that is sending the file:
rsync -aHpEogtv --rsync-path='sudo rsync' --delete --delay-updates -e 'ssh -2 -i /home/user/privateKey -p 443' /source user@IPADDRESS:/destination
Ah... found a resolution, apparently the command user ALL=(ALL) NOPASSWD:/usr/bin/rsync should be located at the end of /etc/sudoers file
Post a Comment
Links to this post:
Create a Link
<< Home