将 rsync 与 sudo 结合使用

将 rsync 与 sudo 结合使用

我想要使​​用 sudo 的 rsync。

1 我尝试从这个解决方案话题

huser@linux:~$ rsync -avz --stats --rsync-path="echo 4321 | sudo -Sv && sudo rsync" /home/huser/mylibs/ [email protected]:/home/ruser  
[email protected]'s password: 

我很困惑 - rsync 不应该要求输入密码,对吧?好的,我输入了 ruser 的密码并收到错误:

[sudo] password for ruser: sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a password is required
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [sender=3.2.7]

其中
ruser 是我在远程 Ubuntu 22 中的用户名,
huser 是我在主机 Ubuntu 22 中的用户名,
4321 是 ruser 的密码(对我来说可以将其保留在历史记录中),
192.168.0.100 是远程机器 IP。

2 我尝试另一种方法,我有 ssh 密钥:

rsync --rsync-path="sudo -S rsync" -rvz -e "ssh -i /home/huser/key/my_ssh_key" --progress /home/huser/bin/ [email protected]:/home/ruser/
[sudo] password for ruser: 4321

我等了一会儿,等待几个字节的文件夹传输完毕...但什么也没发生,甚至没有错误。

3 让我们检查一下 rsync 是否可以在没有 sudo 的情况下工作:

rsync -avz --stats /home/huser/mylibs/ [email protected]:/home/ruser

一切正常。

我如何使用 sudo?

答案1

由于某种原因,该sudo -v选项似乎不起作用,可能是因为它是 SSH,或者因为你禁用了超时。让我们避免这种情况:

rsync -avz --stats --rsync-path="{ echo 4321; cat; } | sudo -S rsync" /home/huser/mylibs/ [email protected]:/home/ruser

您应该会看到[sudo] password for ruser:出现一秒钟,然后它将变成[sudo] password for ruser: sending incremental file list。这sudo可能导致文件最终归 root 所有。如果不希望如此,您应该删除chown它们或删除sudo

相关内容