在远程机器上以 root 权限运行 rsync

Pet*_*ter 46 sudo rsync ubuntu

我想将我机器上的文件夹与远程机器上的文件夹同步。远程文件夹只能由root. 我在远程机器上有一个帐户,可以使用sudo. 如何运行 rsync 使其在远程计算机上具有 root 权限?

我尝试了以下方法:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="sudo rsync"
Run Code Online (Sandbox Code Playgroud)

但是(输入密码后)出现以下错误:

sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)

小智 27

试试这个解决方案。在您的 sudoers 文件 ( /etc/sudoers) 中,像这样设置您的用户:

username ALL= NOPASSWD:/usr/bin/rsync
Run Code Online (Sandbox Code Playgroud)

NOPASSWD:/usr/bin/rsync通知sudo,当你的用户运行/usr/bin/rsync或仅rsync是不需要密码。

那么你的原件--rsync-path="sudo rsync"应该可以工作。

  • 请参阅 https://unix.stackexchange.com/a/92397/128237 了解此修复程序的安全隐患。 (5认同)
  • 您还应该说明如何编辑 sudoers 文件 (2认同)
  • 该行的位置很重要,最好将其放在文件末尾。我因此被困了30分钟。https://askubuntu.com/questions/100051/why-is-sudoers-nopasswd-option-not-working (2认同)

Pet*_*ter 13

这是我想出的解决方案:

rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S  mkdir -p /remote/lovely/folder && sudo rsync" /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete
Run Code Online (Sandbox Code Playgroud)

有点任务!

  • 我希望您能在命令行中看到您的密码。它应该在 rsync 运行的时间内可见。 (16认同)

And*_*rew 10

这个博客上的解决方案对我来说非常有效:http : //www.pplux.com/2009/02/07/rsync-root-and-sudo/

基本上:

stty -echo; ssh myUser@REMOTE_SERVER "sudo -v"; stty echo  
rsync -avze ssh --rsync-path='sudo rsync' myUser@REMOTE_SERVER:/REMOTE_PATH/ LOCAL_PATH 
Run Code Online (Sandbox Code Playgroud)

第一行允许交互式密码输入,而不在屏幕上显示密码。在 Ubuntu 9.04 上非常适合我。

  • 用`ssh -t [other options]`代替`stty -echo`怎么样? (2认同)

小智 6

在远程机器上

sudo apt install ssh-askpass
which ssh-askpass
Run Code Online (Sandbox Code Playgroud)

然后在本地机器上

rsync -av -e 'ssh -X' --rsync-path='SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass sudo -A rsync' /some/local/path user@remote:/some/remote/path
Run Code Online (Sandbox Code Playgroud)

将 ssh-askpass 的路径替换为远程计算机上的实际路径

来源:http://unix.bris.ac.uk/2015/08/04/rsync- Between-two-hosts-using-sudo-and-a-password-prompt/


nde*_*mou 5

我对现有答案的复杂性感到惊讶!这是迄今为止容易和方便地配置系统(PC和远程主机),这样就可以以root身份连接到远程主机,而无需使用密码。虽然听起来很可怕但它非常安全

  1. 在远程主机上,确保 /etc/ssh/sshd_config 有这一行“PermitRootLogin without-password”(在许多发行版中,它默认存在)。这允许 root 使用任何身份验证方法获取 ssh shell,不安全的密码提示除外
  2. (如果您还不知道如何)按照有关如何通过 ssh 获取无密码登录的许多教程中的任何一个进行操作
  3. 像往常一样使用 rsync 并且没有任何密码提示。

只是不要忘记,只要远程主机的 /root/.ssh/authorized_keys 中的行在那里,机器就可以接受来自您 PC 的 root 命令。