Usando rsync com sudo na máquina de destino


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


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

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"  user@192.168.1.2:/ .

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.