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

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

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

我尝试了以下方法:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="sudo rsync"

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

sudo: no tty present and no askpass program specified

答案1

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

username ALL= NOPASSWD:/usr/bin/rsync

NOPASSWD:/usr/bin/rsync告诉sudo您何时用户运行/usr/bin/rsync或只是rsync不需要密码。

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

答案2

这是我想出的解决方案:

rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S  mkdir -p /remote/lovely/folder && sudo rsync" /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete

有点使命啊!

答案3

我对现有答案的复杂性感到惊讶!它是远的更容易配置远程主机,以便您可以以 root 身份从具体的客户端无需使用密码。虽然听起来很可怕,它非常安全

  1. 在远程主机上,确保/etc/ssh/sshd_config有此行PermitRootLogin without-password(在许多发行版中,它默认存在)。这允许 root 使用任何身份验证方法获取 ssh shell除了不安全的密码提示。
  2. (如果你还不知道如何操作)请按照以下任一步骤操作许多教程如何通过 ssh 实现无密码登录
  3. 像平常一样使用 rsync,无需任何密码提示。

只是不要忘记,在步骤 2 之后,只要您不删除添加的行/root/.ssh/authorized_keys,您的客户端就可以以 root 身份连接到远程主机。

答案4

在远程机器上

sudo apt install ssh-askpass
which ssh-askpass

然后在本地机器上

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

用远程机器上的实际路径替换 ssh-askpass 的路径

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

相关内容