Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am trying to use rsnapshot to sync remote file to my own computer. However, I have some trouble when I need to access files which are not owned by user who is SSH-ing to the remote machine.

My /etc/rsnapshot.conf looks like this:

config_version  1.2
snapshot_root   /shared/.backup/
cmd_cp          /bin/cp
cmd_rm          /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_ssh         /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du          /usr/bin/du

retain      hourly  6
retain      daily   7
retain      weekly  4
retain      monthly 3

verbose     2
loglevel    5
logfile     /shared/.backup/rsnapshot.log

ssh_args    -i ~/.ssh/id_rsa -p 62222

backup  username@          dev.local.root/     exclude_file=/shared/.backup/exclude.root,+rsync_long_args=--rsync-path='sudo rsync',rsync_short_args=-zalhHx

After running rsnapshot hourly I see this error:

bash: sudo rsync: command not found
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.0]
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot hourly
ERROR: /usr/bin/rsync returned 127 while processing username@

If I check my rsnapshot.log file, I can see that rsnapshot tried this command:

/usr/bin/rsync -zalhHx --delete --numeric-ids --relative --delete-excluded --exclude-from=/shared/.backup/exclude.root --rsync-path='sudo rsync' --rsh=/usr/bin/ssh -i ~/.ssh/id_rsa -p 62222 username@ /shared/.backup/hourly.0/dev.local.root/

If I try to run the same command in terminal, I get this error:

Unexpected remote arg: username@
rsync error: syntax or usage error (code 1) at main.c(1348) [sender=3.1.0]

However, if I put quotation marks around --rsh part everything works fine:

/usr/bin/rsync -zalhHx --delete --numeric-ids --relative --delete-excluded --exclude-from=/shared/.backup/exclude.root --rsync-path='sudo rsync' --rsh='/usr/bin/ssh -i ~/.ssh/id_rsa -p 62222' username@ /shared/.backup/hourly.0/dev.local.root/

Some facts

  • On remote machine, there is a line username ALL=(ALL) NOPASSWD:ALL in sudoers file.
  • I can normally SSH to the remote machine with my SSH key.
  • I can invoke sudo commands on server without being asked for a password.
  • I cannot SSH as root to remote machine because of PermitRootLogin on and AllowUsers username in sshd_config
  • If I try ssh username@ -p 62222 -i ~/.ssh/id_rsa which rsync, the output is /usr/bin/rsync
  • If I try ssh username@ -p 62222 -i ~/.ssh/id_rsa echo $PATH, the output is /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

So.... My question is simple: how do I properly construct this rsync command in rsnapshot?
Thanks for help!

share|improve this question

I had exactly the same error, I was forced to specify a manual script

--rsync-path='sudo rsync' > --rsync-path='/usr/local/bin/rsync'

with /usr/local/bin/rsync on remote

#! /bin/sh
exec /usr/bin/sudo /usr/bin/rsync "$@" 
share|improve this answer
There is usually no space after #!. I would avoid it - just in case some systems are strict about the format. – kasperd Dec 14 '15 at 15:38

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.