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 root
para www-data
.
Posso fazer o mesmo com o Rsync, apenas em www-data
vez 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
- Máquina:
- Para:
- Máquina:
destmachine
- Usuário:
destuser
paraestabelecer a conexão SSH. - Diretório:
/tmp
- Proprietário dos arquivos finais:
jenkins
.
- Máquina:
Solução
rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp
Leia mais aqui: