通过 SSH 进行 RSYNC 请求密码

通过 SSH 进行 RSYNC 请求密码

我看了很多问题但似乎没有找到我想要的东西。

我创建了一个脚本,尝试通过 ssh 运行 rsync,最终会将其放入 cron 作业中。所有变量都已定义,脚本的重要部分如下:

$RSYNC -az --stats -e "$SSH -i $KEY" $RUSER@RHOST:$RPATH $LPATH

KEY指向我的私钥,公钥复制到RHOST并添加到授权用户。

目前 RPATH 上的权限为 775,当我尝试运行脚本时,系统会提示我输入 RHOSTs 密码,这对于进入 cron 作业来说不是很有用。

但是,如果我将 RPATH 的权限更改为 755,则脚本运行时不会提示输入密码。不幸的是,我无法永久进行此更改。

所以我有三个问题:
首先,rsync 或 ssh 会给我带来麻烦吗?
其次,为什么会出现这种情况?对我来说,允许组对目录的写访问会导致提示输入密码,这毫无意义。
第三,也是最后,我正在寻找解决这个问题的方法。RUSER 具有 sudo 权限。(我宁愿不在命令行中嵌入密码。)

先谢谢您的帮助!

答案1

根据手册(rsync 命令),你没有使用正确的-l选项:

如果您需要指定不同的远程 shell 用户,请记住主机前面的 user@ 前缀指定了 rsync-user 值(对于需要基于用户的身份验证的模块)。这意味着在指定远程 shell 时,您必须为 ssh 提供“-l user”选项,如以下使用 --rsh 选项的简短版本的示例所示:

       rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest

   The "ssh-user" will be used at the ssh level; the "rsync-user" will be used to log-in to the "module".

答案2

所以这就是我最终做的事情,@MariusMatutiae 让我朝着正确的方向前进!

根据其他一些建议,我发现我可以通过 ssh 以 sudo 方式运行 rsync。我创建了一个新用户BKUP用户在远程主机上并将该用户添加到拥有我尝试备份的文件的 RHOST 组。

在 sudoers 中我添加了两行:
BKUPuser ALL= NOPASSWD:/usr/bin/rsync这阻止了错误:“sudo:没有 tty 存在并且没有指定 askpass 程序”(https://unix.stackexchange.com/questions/92123/rsync-all-files-of-remote-machine-over-ssh-without-root-user) 我知道这存在一些安全漏洞,但这两台机器对外界来说都是不可见的。

第二次补充:
Defaults:user !requiretty这个停止的错误:“sudo:抱歉,您必须有一个 tty 才能运行 sudo”

然后命令最终变成:
$RSYNC -e "$SSH -i $KEY -t -l BKUPuser" --rsync-path='sudo rsync'-az --stats BKUPuser@RHOST:$RPATH $LPATH

我唯一遇到的问题是收到错误“无法分配伪终端,因为 stdin 不是终端。”由于 rsync 正在备份文件,所以目前这只是一个烦恼。我尝试使用 -t -t 按照建议https://stackoverflow.com/questions/7114990/pseudo-terminal-will-not-be-allocated-because-stdin-is-not-a-terminal但没有运气。

相关内容