Usando rsync com sudo na máquina de destino

39

Tendo um problema que o rsync não define o UID e o GID conforme o esperado , meu pressentimento é que ele rsyncdeve ser executado como rootna máquina de destino.

Não consigo fazer login como rootvia SSH, pois isso está desativado por motivos de segurança. O usuário na máquina de destino pode usar sudo.

É possível usar rsynccom sudo?

Thomas Weller
fonte

Respostas:

68

Na máquina de destino

  1. Descubra o caminho para rsync:which rsync
  2. Edite o /etc/sudoersarquivo: sudo visudo(veja também: devo usar o visudo? )
  3. Adicione a linha <username> ALL=NOPASSWD:<path to rsync>, onde username é o nome de login do usuário que o rsync utilizará para fazer logon. Esse usuário deve poder usarsudo

Em seguida, na máquina de origem, especifique que sudo rsyncdeve ser usado:

rsync ... --rsync-path="sudo rsync" ...

Usá-lo sem a NOPASSWDmáquina de destino resultará na mensagem

sudo: nenhum tty presente e nenhum programa askpass especificado

Thomas Weller
fonte
Qual é a modificação feita para permitir que qualquer usuário de um grupo específico faça isso? Em vez de <username>, existe uma versão <groupname>?
Brian
3
Obrigado, apenas eu uso pki, então eu usei-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AT
11
Claro que o <username> agora pode ler / gravar tudo como root usando o rsync, localmente e remotamente, então a parte de não conseguir fazer login como root devido a questões de segurança é meio discutível ... porque basicamente você está fazendo isso agora .
Hmn
11
Ainda está recebendo o erro "not tty present ..." depois de seguir estas instruções? Eu fui. Certifique-se de que a linha que adicionei /etc/sudoersapareça no final do arquivo (ou depois de qualquer regra de grupo que possa afetar o mesmo usuário) resolva o problema para mim.
CPBL 28/01
11
Estou usando esta solução, mas gostaria de melhorar a segurança restringindo os argumentos que o usuário pode transmitir ao rsync no servidor de destino. Normalmente, eu limitaria os argumentos que podem ser usados, <username> ALL=NOPASSWD:<path to rsync> <args>mas não sei como seriam os argumentos quando chamados remotamente assim. Alguma ideia?
Pete Cornell
3

Você pode fazer com que o sudo remoto solicite sua senha através do X-windows. Aqui está uma maneira de fazer isso:

  1. Verifique se ssh-askpassestá instalado no host remoto (e se você está usando o X-windows, é claro)
  2. Verifique se está em /etc/sudo.conf:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. Adicione estas opções ao rsync: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X encaminhará as informações e portas do X-windows para sua sessão remota
    • sudo -A fará com que o sudo use ssh-askpass para solicitar sua senha
Bill Burdick
fonte
Funciona no Ubuntu 18; crie /etc/sudo.conf (se ainda não existir) no destino m / c
Snidhi Sofpro 20/11
0

Minha solução é usar --rsync-path="sudo rsync", se pedir senha, você poderá usar uma solução alternativa como esta:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  [email protected]:/ .

Mas isso não é seguro para colocar uma senha na linha de comando.

Bulat
fonte