遇到rsync 没有按预期设置 UID 和 GID 的问题,我的直觉是rsync
应该root
在目标机器上运行。
我无法root
通过 SSH 登录,因为出于安全目的已禁用该功能。目标机器上的用户可以使用sudo
.
可以rsync
用sudo
吗?
遇到rsync 没有按预期设置 UID 和 GID 的问题,我的直觉是rsync
应该root
在目标机器上运行。
我无法root
通过 SSH 登录,因为出于安全目的已禁用该功能。目标机器上的用户可以使用sudo
.
可以rsync
用sudo
吗?
在目标机器上
rsync
:which rsync
/etc/sudoers
文件:(sudo visudo
另请参阅:我必须使用 visudo 吗?)<username> ALL=NOPASSWD:<path to rsync>
,其中username是 rsync 将用于登录的用户的登录名。该用户必须能够使用sudo
然后,在源机器上,指定
sudo rsync
应使用的:在没有目标机器的情况下使用它
NOPASSWD
会导致消息我的解决方案是使用
--rsync-path="sudo rsync"
,如果它要求输入密码,您可以使用如下解决方法:但是,最好不要在命令行上输入密码,因为它仍会存储在终端历史记录中。相反,您可以使用
read -s
提示输入密码而不显示它:(注意:
-p
并非所有 shell(例如 zsh)都支持提示,如果出现错误,可以将其关闭,或者在阅读之前回显)您可以让远程 sudo 通过 X-windows 询问您的密码。这是一种方法:
ssh-askpass
已安装在远程主机上(当然,您使用的是 X-windows)/etc/sudo.conf
:将这些选项添加到 rsync:
-e "ssh -X" --rsync-path="sudo -A rsync"
ssh -X
将您的 X-windows 信息和端口转发到您的远程会话sudo -A
将使 sudo 使用 ssh-askpass 询问您的密码如果无法访问 sudoers 文件,只需为 ssh 命令创建一个包装脚本。
ssh_sudo:
首先,这会将密码传递给 ssh 客户端的 sudo 进程,以便在远程端启动 rsync。接下来,来自本地 rsync 的所有输入都通过管道传输到 ssh。
最后调用 rsync 例如:
我想这里的安全方面还不错,您只需将密码在本地保存为 env var。从文件中读取它也应该工作......
在尝试解决
ansible
synchronize
模块中的相同问题时,我遇到了这个问题,并想提请注意 Simon Schmid 的解决方案https://askubuntu.com/a/1263657/874618。无法使用我的帐户进行投票或评论(没有足够的声誉点),因此我将其发布为另一个答案:Simon 的解决方案不仅是最安全的选择,因为它不需要更改
sudoers
并使用环境传递密码(这样它就不会在历史文件和日志中弹出),它也可以在不更改目标机器的情况下工作,这非常如果您想要rsync
大量新机器并且不想仅为此命令重新配置它们,则很方便。在玩了一会儿之后,我设法内联了用于
ssh
在主机上包装的 shell 命令,因此可以只使用rsync
一行:快乐同步 ;-)
建议修改密码
/etc/sudoers
或echo
将密码输入管道的解决方案让人感觉不舒服。相反,我发现这里发布的答案是成功的。我的轻微修改
sudo
在第二行的 rsync 调用之前添加了一个,以便在本地计算机上也具有不受限制的写入权限。