我想要使用 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
。