概述

概述

我通常使用图形 SSH 客户端来同步本地和远程目录。并且我必须将所有文件的所有权从 设置rootwww-data

我可以使用 Rsync 执行相同操作吗,只是我用 而www-data不是 来执行此操作root,这样我就不必事后设置所有权?

答案1

目前尚不清楚您想要做什么,因此我假设您希望本地文件归用户 A 所有,而远程文件归用户 B 所有。如果您以用户 A 的身份运行以下命令:

rsync [options] [email protected]:/path/to/remote/dir /path/to/local/dir

这会产生您想要的效果。但这实际上不是 rsync 问题(因此我不会详细说明上述命令将做什么,我专注于您的问题);即使使用图形 SSH 客户端,如果您以用户 A 的身份运行它并将其设置为以用户 B 的身份登录到远程系统,您也应该能够执行相同的操作。

答案2

假设您以 root 身份运行,请使用 rsync 内置的 chown 选项:

sudo rsync --chown=www-data:group user@remoteIP:/var/www/html/ /var/www/html

(将“group”替换为您想要的组,或者直接使用--chown = www-data,还可以替换user,remoteIP并根据您的喜好更改文件夹)

如果您不以 root 身份运行该命令,则文件所有权将不会更改,因为您需要 sudo 才能执行该操作。因此,您确实必须以 www-data 身份运行该命令,但这会导致其他复杂情况。

答案3

如果您可以 sudo -u www-data,那么您可以使用该用户运行 rsync。如果您的目的地在不同的服务器上,那么您还需要将 --rsync-path 设置为相同的(sudo -u www-data rsync)。您还需要解决 tty 问题(通过在 ssh 中使用 -t),尽管根据您的发行版和 ssh 服务器设置,它可能非常棘手。我个人认为更容易使用 root 并在之后执行 chown,除非服务器不允许远程 root 登录。

答案4

概述

(srcmachine)  (rsync)   (destmachine)
  srcuser    -- SSH -->   destuser
                             |
                             | sudo su jenkins
                             |
                             v
                          jenkins

假设你想要 rsync:

  • 从:
    • 机器:srcmachine
    • 用户:srcuser
    • 目录:/var/lib/jenkins
  • 到:
    • 机器:destmachine
    • 用户:destuser建立 SSH 连接
    • 目录:/tmp
    • 最终文件所有者:jenkins

解决方案

rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp

更多详情请阅读:

https://unix.stackexchange.com/a/546296/116861

相关内容