我通常使用图形 SSH 客户端来同步本地和远程目录。并且我必须将所有文件的所有权从 设置root
为www-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
更多详情请阅读: