AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 719439
Accepted
Thomas Weller
Thomas Weller
Asked: 2016-01-11 05:28:47 +0800 CST2016-01-11 05:28:47 +0800 CST 2016-01-11 05:28:47 +0800 CST

在目标机器上使用 rsync 和 sudo

  • 772

遇到rsync 没有按预期设置 UID 和 GID 的问题,我的直觉是rsync应该root在目标机器上运行。

我无法root通过 SSH 登录,因为出于安全目的已禁用该功能。目标机器上的用户可以使用sudo.

可以rsync用sudo吗?

permissions
  • 6 6 个回答
  • 106557 Views

6 个回答

  • Voted
  1. Best Answer
    Thomas Weller
    2016-01-11T05:28:47+08:002016-01-11T05:28:47+08:00

    在目标机器上

    1. 找出路径rsync:which rsync
    2. 编辑/etc/sudoers文件:(sudo visudo另请参阅:我必须使用 visudo 吗?)
    3. 添加行<username> ALL=NOPASSWD:<path to rsync>,其中username是 rsync 将用于登录的用户的登录名。该用户必须能够使用sudo

    然后,在源机器上,指定sudo rsync应使用的:

    rsync ... --rsync-path="sudo rsync" ...
    

    在没有目标机器的情况下使用它NOPASSWD会导致消息

    sudo:不存在 tty,也没有指定 askpass 程序

    • 160
  2. Bulat
    2019-07-05T03:14:01+08:002019-07-05T03:14:01+08:00

    我的解决方案是使用--rsync-path="sudo rsync",如果它要求输入密码,您可以使用如下解决方法:

    rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  [email protected]:/ .
    

    但是,最好不要在命令行上输入密码,因为它仍会存储在终端历史记录中。相反,您可以使用read -s提示输入密码而不显示它:

    read -s -p "Remote sudo password: " SUDOPASS && rsync -avz --stats --rsync-path="echo $SUDOPASS | sudo -Sv && sudo rsync"  [email protected]:/ .
    

    (注意:-p并非所有 shell(例如 zsh)都支持提示,如果出现错误,可以将其关闭,或者在阅读之前回显)

    • 13
  3. Bill Burdick
    2019-08-23T11:16:36+08:002019-08-23T11:16:36+08:00

    您可以让远程 sudo 通过 X-windows 询问您的密码。这是一种方法:

    1. 确保ssh-askpass已安装在远程主机上(当然,您使用的是 X-windows)
    2. 确保这是在/etc/sudo.conf:
    # Path to askpass helper program
    Path askpass /usr/bin/ssh-askpass
    
    1. 将这些选项添加到 rsync:-e "ssh -X" --rsync-path="sudo -A rsync"

      • ssh -X将您的 X-windows 信息和端口转发到您的远程会话
      • sudo -A将使 sudo 使用 ssh-askpass 询问您的密码
    • 7
  4. Simon Schmid
    2020-08-01T14:06:34+08:002020-08-01T14:06:34+08:00

    如果无法访问 sudoers 文件,只需为 ssh 命令创建一个包装脚本。

    ssh_sudo:

    { 
      echo $PASSWORD;
      cat - ;
    } | ssh $* &
    

    首先,这会将密码传递给 ssh 客户端的 sudo 进程,以便在远程端启动 rsync。接下来,来自本地 rsync 的所有输入都通过管道传输到 ssh。

    最后调用 rsync 例如:

    PASSWORD=<SUDOPASS> rsync -avzue ssh_sudo --rsync-path "sudo -S rsync" SRC DST
    

    我想这里的安全方面还不错,您只需将密码在本地保存为 env var。从文件中读取它也应该工作......

    • 2
  5. Mark Asbach
    2022-03-13T14:35:53+08:002022-03-13T14:35:53+08:00

    在尝试解决ansible synchronize模块中的相同问题时,我遇到了这个问题,并想提请注意 Simon Schmid 的解决方案https://askubuntu.com/a/1263657/874618。无法使用我的帐户进行投票或评论(没有足够的声誉点),因此我将其发布为另一个答案:

    Simon 的解决方案不仅是最安全的选择,因为它不需要更改sudoers并使用环境传递密码(这样它就不会在历史文件和日志中弹出),它也可以在不更改目标机器的情况下工作,这非常如果您想要rsync大量新机器并且不想仅为此命令重新配置它们,则很方便。

    在玩了一会儿之后,我设法内联了用于ssh在主机上包装的 shell 命令,因此可以只使用rsync一行:

    PASSWORD=<SUDOPASS> rsync -avzue '/bin/sh -c "{ echo $PASSWORD; cat - ; } | ssh $0 $* &"' --rsync-path "sudo -S rsync" SRC DST
    

    快乐同步 ;-)

    • 1
  6. Miron Veryanskiy
    2021-08-07T11:11:15+08:002021-08-07T11:11:15+08:00

    建议修改密码/etc/sudoers或echo将密码输入管道的解决方案让人感觉不舒服。

    相反,我发现这里发布的答案是成功的。我的轻微修改sudo在第二行的 rsync 调用之前添加了一个,以便在本地计算机上也具有不受限制的写入权限。

    stty -echo; ssh myUser@REMOTE_SERVER "sudo -v"; stty echo  
    sudo rsync -avze ssh --rsync-path='sudo rsync' myUser@REMOTE_SERVER:/REMOTE_PATH/ /LOCAL_PATH/
    
    • 0

相关问题

  • 访问启用的虚拟主机时出现 403 禁止错误

  • WINE 用户配置

  • 无法更新雷鸟

  • Ubuntu 在什么许可证下?可以合法修改和分发吗?

  • 文件权限如何工作?文件权限用户和组

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve