我想将我机器上的文件夹与远程机器上的文件夹同步。远程文件夹只能由 操作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 身份从具体的客户端无需使用密码。虽然听起来很可怕,它非常安全。
- 在远程主机上,确保
/etc/ssh/sshd_config
有此行PermitRootLogin without-password
(在许多发行版中,它默认存在)。这允许 root 使用任何身份验证方法获取 ssh shell除了不安全的密码提示。 - (如果你还不知道如何操作)请按照以下任一步骤操作许多教程如何通过 ssh 实现无密码登录
- 像平常一样使用 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/