Обзор

Обзор

Я обычно использую графический 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, используйте опцию chown, встроенную в rsync:

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 (используя -t в вашем ssh), хотя в зависимости от вашего дистрибутива и настроек сервера 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

Связанный контент