首页 > 解决方案 > 目标设备上的 sudo rsync

问题描述

早上好,

我目前有一个问题,我在 StackOverflow 或谷歌搜索上找不到答案,我还没有解决。

我正在尝试将 rsync 用作目标设备上的 sudo 用户。

问题:

我试过的:

rsync -a --rsync-path "sudo rsync" USER@HOST:/root/FILE ./

问题:“需要终端才能读取密码”

好的,让我们尝试通过标准输入传递它

rsync -a --rsync-path "echo 'PASSWORD' | sudo -S rsync" USER@HOST:/root/FILE ./

rsync:连接意外关闭(到目前为止收到 0 个字节)[发件人]

问题:rsync 错误:在 io.c(226) [sender=3.1.3] 的 rsync 协议数据流(代码 12)中出错

rsync:连接意外关闭(到目前为止已收到 4 个字节)[接收者]

rsync 错误:/BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/io.c(453) [receiver=2.6] 处的 rsync 协议数据流(代码 12)中的错误。 9]

你们对我可以做什么还有其他想法吗?

我知道回显密码不是最佳做法,但是在我连接的服务器没有与 root 用户进行密钥交换并且我无法更改 SUDOPASS 设置的情况下,我没有很多其他选项。

最后,这一切都被插入到 Python 脚本中,所以如果有更好的 Python 方式将 rsync 用作 sudoer,请通知我。

标签: pythonshellrsync

解决方案


如果你的远程 sudo 被配置为一旦你给了密码,你就不需要再给它一段时间了,那么你可以试试这个:

rsync -a --rsync-path "echo 'PASSWORD' | sudo -S date >&/dev/null; sudo rsync" \
  USER@HOST:/root/FILE ./

调试远程 add 上正在运行的命令--debug=CMD2。如果您的遥控器不理解 bash 语法>&/dev/null,请使用较长的>/dev/null 2>/dev/null.


推荐阅读