Execute o rsync com permissão de root no computador remoto

28

Eu quero sincronizar uma pasta da minha máquina com uma pasta em uma máquina remota. A pasta remota só pode ser manipulada por root . Eu tenho uma conta na máquina remota que pode usar sudo . Como posso executar o rsync de forma que ele tenha permissões de root na máquina remota?

Eu tentei o seguinte:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="sudo rsync"

Mas, depois de digitar minha senha, recebo o seguinte erro:

sudo: no tty present and no askpass program specified
    
por Peter 14.04.2011 / 18:45

9 respostas

11

Esta é a solução que eu criei:

rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S  mkdir -p /remote/lovely/folder && sudo rsync" /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete

Pouco de uma missão!

    
por 15.04.2011 / 17:23
10

A solução neste blog funcionou muito bem para mim: link .

Basicamente:

stty -echo; ssh myUser@REMOTE_SERVER "sudo -v"; stty echo  
rsync -avze ssh --rsync-path='sudo rsync' myUser@REMOTE_SERVER:/REMOTE_PATH/ LOCAL_PATH 

A primeira linha permite a entrada de senha interativa, sem mostrar a senha na tela. Funciona muito bem no Ubuntu 9.04.

    
por 23.06.2011 / 04:59
9

Tente esta solução. Em seu arquivo sudoers ( /etc/sudoers ), configure seu usuário assim:

username ALL= NOPASSWD:/usr/bin/rsync

o NOPASSWD:/usr/bin/rsync informa sudo que, quando o usuário executa /usr/bin/rsync ou apenas rsync , nenhuma senha é necessária.

Então o seu --rsync-path="sudo rsync" original deve funcionar.

    
por 09.08.2013 / 19:41
4

Você precisa de um método para fornecer a senha para sudo . Um programa askpass foi projetado para solicitar senhas quando os mecanismos normais não estão disponíveis. Configurar sudo para não exigir uma senha para executar rsync , já que seu ID do usuário é uma opção.

Eu normalmente configuro login baseado em chave com restrições apropriadas para casos como este. Se você configurar uma chave restrita que execute somente rsync como root, esse tipo de coisa fica mais fácil de ser feito. Outra alternativa é usar um processo rsycnd para manipular as solicitações remotas. A configuração fornece uma variedade de restrições que podem ser aplicadas.

EDIT: Eu incluí um script para configurar chaves para loops baseados em chave na seção Criando Userids em Clientes do meu post em Configurando o BackupPC no Linux . Veja também a documentação do ssh_config que detalha algumas das coisas que você pode fazer com o restabelecimento do uso da chave, conforme mostrado no script.

    
por 14.04.2011 / 21:19
2

na máquina remota

sudo apt install ssh-askpass
which ssh-askpass

então na máquina local

rsync -av -e 'ssh -X' --rsync-path='SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass sudo -A rsync' /some/local/path user@remote:/some/remote/path

caminho substituto para ssh-askpass com caminho real na máquina remota

fonte: link

    
por 14.07.2017 / 22:50
1

Estou espantado com a complexidade das respostas existentes. É distante mais fácil e conveniente para configurar seus sistemas (seu PC e o host remoto) para que você possa se conectar como root ao host remoto sem usar uma senha. E ao contrário da aparência do também é seguro .

  1. No host remoto, certifique-se de que / etc / ssh / sshd_config possua esta linha "PermitRootLogin sem senha" (em muitas distribuições ele está lá por padrão). Isso permite que o root obtenha um shell ssh usando qualquer método de autenticação exceto o prompt de senha insegura.
  2. (Se você ainda não sabe como) siga os muitos tutoriais sobre como obter login sem senha via ssh
  3. Use o rsync como faria normalmente e sem prompts de senha.

Apenas não se esqueça que enquanto a linha em /root/.ssh/authorized_keys do host remoto estiver lá, a máquina aceitará os comandos root do seu PC.

    
por 17.01.2017 / 17:47
0

Aqui está o que funcionou para mim, considerando que eu quero manter a autenticação de senha (por isso não quero usar NOPASSWD ou chaves) - no Ubuntu 14.04:

  • "Abra" sudo na máquina remota desabilitando tty_tickets através de um arquivo temporário em /etc/sudoers.d/ (que deve ser suportado no Debian, veja /etc/sudoers.d/README ), e "Atualizar as credenciais em cache do usuário", que "prolonga o tempo limite do sudo por mais 15 minutos"
  • Execute o rsync com sudo , conforme mostrado em outras respostas
  • "Fechar" sudo na máquina remota, removendo o arquivo temporário em /etc/sudoers.d/ , que reativa tty_tickets

... ou, com as linhas de comando:

ssh -t $REMOTEPC 'echo "Defaults !tty_tickets" | sudo tee /etc/sudoers.d/temp; sudo -v'
rsync -aP -e 'ssh' '--rsync-path=sudo rsync' /etc/pulse/client.conf $REMOTEPC:/etc/pulse/client-copy.conf
ssh -t $REMOTEPC 'sudo rm -v /etc/sudoers.d/temp; sudo -v'

Estas são as respostas que recebo ao executar esses comandos na máquina local:

$ ssh -t $REMOTEPC 'echo "Defaults !tty_tickets" | sudo tee /etc/sudoers.d/temp; sudo -v'
remoteuser@$REMOTEPC's password: 
[sudo] password for remoteuser: 
Defaults !tty_tickets
Connection to $REMOTEPC closed.

$ rsync -aP -e 'ssh' '--rsync-path=sudo rsync' /etc/pulse/client.conf $REMOTEPC:/etc/pulse/client-copy.conf
remoteuser@$REMOTEPC's password: 
sending incremental file list
client.conf
           1269 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

$ ssh -t $REMOTEPC 'sudo rm -v /etc/sudoers.d/temp; sudo -v'
remoteuser@$REMOTEPC's password: 
removed ‘/etc/sudoers.d/temp’
[sudo] password for remoteuser: 
Connection to $REMOTEPC closed.

Observe que sudo -v deve ser executado após cada vez que houver arquivos em /etc/sudoers.d/ , portanto, as alterações são aceitas.

    
por 05.12.2017 / 12:54
0

Outro método é contornar as restrições de permissões iniciando o rsync na máquina remota. Em vez de:

rsync /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder

Você pode fazer:

ssh [email protected] 'rsync [email protected]:/home/ubuntu/my/lovely/folder /remote/lovely/folder'

Onde y.y.y.y é o endereço IP da sua máquina local. Isso só funciona se a sua máquina local puder atuar como um servidor SSH.

    
por 13.02.2017 / 23:45
0

Meu trabalho é adicionar --rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"

exemplo:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"

Geralmente, não é uma boa ideia colocar as senhas em uma linha de comando; eles se tornam visíveis na árvore de processos, por exemplo. Eu às vezes substituo a senha real neste tipo de declaração com $ (cat my_password.txt) que é um pouco melhor

rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"

    
por 28.08.2018 / 10:00