Using rsync with sudo on the destination machine
On the destination machine
- Find out the path to
rsync
:which rsync
- Edit the
/etc/sudoers
file:sudo visudo
(see also: must I use visudo?) - Add the line
<username> ALL=NOPASSWD:<path to rsync>
, where username is the login name of the user that rsync will use to log on. That user must be able to usesudo
Then, on the source machine, specify that sudo rsync
shall be used:
rsync ... --rsync-path="sudo rsync" ...
Using it without the NOPASSWD
on the destination machine will result in the message
sudo: no tty present and no askpass program specified
My solution is to use --rsync-path="sudo rsync"
, if it ask for password you can use workaround like this:
rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync" [email protected]:/ .
But this is not secure to put a password in command line.
You can have the remote sudo ask you for your password through X-windows. Here's a way to do that:
- Make sure
ssh-askpass
is installed on the remote host (and that you are using X-windows, of course) - Make sure this is in
/etc/sudo.conf
:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
-
Add these options to rsync:
-e "ssh -X" --rsync-path="sudo -A rsync"
-
ssh -X
will forward your X-windows information and port to your remote session -
sudo -A
will make sudo use ssh-askpass to ask you for your password
-