在目标计算机上将sudo与rsync一起使用


Answers:


68

在目标机器上

  1. 找出路径rsyncwhich rsync
  2. 编辑/etc/sudoers文件:(sudo visudo另请参见:我必须使用visudo吗?
  3. 添加以下行<username> ALL=NOPASSWD:<path to rsync>,其中username是rsync将用于登录的用户的登录名。该用户必须能够使用sudo

然后,在源计算机上,指定sudo rsync应使用:

rsync ... --rsync-path="sudo rsync" ...

NOPASSWD在目标计算机上不使用它的情况下,将导致出现消息

sudo:不存在tty且未指定askpass程序


对此进行了哪些修改,以允许特定组中的任何用户执行此操作?不是<username>,而是<groupname>版本?
布赖恩

3
谢谢你,只有我使用PKI所以我用-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AT

1
当然<username>现在可以使用rsync在本地和远程以root身份读取/写入所有内容,因此,出于安全考虑而无法以root身份登录的部分还算是个小问题...因为实际上您现在正在这样做。
hmn

1
遵循以下说明后,仍然出现“ not tty present ...”错误?我曾是。确保我添加到的行/etc/sudoers位于文件末尾(或在可能影响同一用户的任何组规则之后)为我解决了问题。
CPBL

1
我正在使用此解决方案,但想通过限制用户可以传递给目标服务器上rsync的args来提高安全性。通常,我会限制可以使用的args,<username> ALL=NOPASSWD:<path to rsync> <args>但是我不知道当这样远程调用时args是什么。有任何想法吗?
Pete Cornell

2

您可以让远程sudo通过X-windows询问您的密码。这是一种方法:

  1. 确保ssh-askpass已安装在远程主机上(当然,并且您正在使用X-windows)
  2. 确保它在/etc/sudo.conf
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. 将以下选项添加到rsync: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X 会将您的X-windows信息和端口转发到您的远程会话
    • sudo -A 将使sudo使用ssh-askpass询问您的密码

0

我的解决方案是使用--rsync-path="sudo rsync",如果要求输入密码,则可以使用以下解决方法:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  user@192.168.1.2:/ .

但这在命令行中输入密码并不安全。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.