Visão geral

Visão geral

Normalmente uso um cliente SSH gráfico para sincronizar um diretório local e remoto. E eu tenho que definir a propriedade de todos os arquivos de rootpara www-data.

Posso fazer o mesmo com o Rsync, apenas em www-datavez de root, para não precisar definir a propriedade posteriormente?

Responder1

Não está claro o que você deseja fazer, então deixe-me supor que você deseja que os arquivos locais sejam propriedade do usuário A e os arquivos remotos sejam propriedade do usuário B. Se você executar o seguinte comando como usuário A:

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

isso teria o efeito que você deseja. Mas não é realmente um problema de rsync (então não estou explicando o que o comando acima fará, estou focando na sua pergunta); mesmo com seu cliente SSH gráfico, você poderá fazer o mesmo se executá-lo como usuário A e configurá-lo para efetuar logon no sistema remoto como usuário B.

Responder2

Desde que você esteja executando como root, use a opção chown incorporada ao rsync:

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

(substitua 'grupo' pelo grupo desejado ou apenas use --chown = www-data, substitua também usuário, IP remoto e altere as pastas ao seu gosto)

Se você não executar o comando como root, a propriedade do arquivo não será alterada, pois você precisa do sudo para isso. Então você teria que executar o comando como www-data, mas isso leva a outras complicações.

Responder3

se você puder sudo -u www-data, poderá executar o rsync com esse usuário. se o seu destino estiver em um servidor diferente, você também precisará definir --rsync-path como o mesmo (sudo -u www-data rsync). você também precisa solucionar o problema do tty (usando -t no seu ssh), embora dependendo da distribuição e das configurações do servidor ssh, isso possa ser muito complicado. pessoalmente, acho que é mais fácil usar o root e fazer um chown depois, a menos que o servidor não permita login root remoto.

Responder4

Visão geral

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

Digamos que você queira sincronizar novamente:

  • De:
    • Máquina:srcmachine
    • Do utilizador:srcuser
    • Diretório:/var/lib/jenkins
  • Para:
    • Máquina:destmachine
    • Usuário: destuserparaestabelecer a conexão SSH.
    • Diretório:/tmp
    • Proprietário dos arquivos finais: jenkins.

Solução

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

Leia mais aqui:

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

informação relacionada