无法使用rsnapshot同步非拥有的文件,但可以使用普通的rsync命令执行此操作

我正在尝试使用rsnapshot将远程文件同步到我自己的计算机上。 但是,当我需要访问非远程计算机的SSH用户所拥有的文件时,我遇到了一些麻烦。

我的/etc/rsnapshot.conf如下所示:

 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 DEFINITIONS backup [email protected]:/ dev.local.root/ exclude_file=/shared/.backup/exclude.root,+rsync_long_args=--rsync-path='sudo rsync',rsync_short_args=-zalhHx 

rsnapshot hourly运行rsnapshot hourly后,我看到这个错误:

 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 [email protected]:/ 

如果我检查我的rsnapshot.log文件,我可以看到rsnapshot尝试了这个命令:

/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 [email protected]:/ /shared/.backup/hourly.0/dev.local.root/

如果我尝试在terminal中运行相同的命令,我得到这个错误:

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

但是,如果我把引号括起来 – 部分一切正常工作:

/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' [email protected]:/ /shared/.backup/hourly.0/dev.local.root/

一些事实

  • 在远程机器上,在sudoers文件中有一行username ALL=(ALL) NOPASSWD:ALL
  • 我通常可以使用SSH密钥SSH连接到远程计算机。
  • 我可以在服务器上调用sudo命令,而不需要input密码。
  • 由于PermitRootLogin onAllowUsers username ,我无法以root用户身份AllowUsers username到远程计算机
  • 如果我试用ssh [email protected] -p 62222 -i ~/.ssh/id_rsa which rsync ,输出是/usr/bin/rsync
  • 如果我尝试使用ssh [email protected] -p 62222 -i ~/.ssh/id_rsa echo $PATH ,输出是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

所以….我的问题很简单:我如何在rsnapshot正确构造这个rsync命令?
感谢帮助!

我有完全一样的错误,我不得不指定一个手动脚本

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

与/ usr / local / bin / rsync在远程

 #! /bin/sh exec /usr/bin/sudo /usr/bin/rsync "$@"