Esegui rsync con l'authorization di root sulla macchina remota

Vorrei sincronizzare una cartella dalla mia macchina con una cartella di una macchina remota. La cartella remota può essere manipolata solo da root . Ho un account sulla macchina remota che può usare sudo . Come posso eseguire rsync in modo tale che abbia le autorizzazioni di root sulla macchina remota?

Ho provato quanto segue:

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

Ma (dopo aver inserito la mia password) ottengo il seguente errore:

 sudo: no tty present and no askpass program specified 

Questa è la soluzione che ho scoperto:

 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 

Bit di una missione!

La soluzione su questo blog ha funzionato veramente bene per me: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .

Fondamentalmente:

 stty -echo; ssh [email protected]_SERVER "sudo -v"; stty echo rsync -avze ssh --rsync-path='sudo rsync' [email protected]_SERVER:/REMOTE_PATH/ LOCAL_PATH 

La prima row consente di immettere password interattive senza visualizzare la password sullo schermo. Funziona ottima per me su Ubuntu 9.04.

Prova questa soluzione. Nel tuo file sudoers ( /etc/sudoers ) imposta il tuo utente come questo:

 username ALL= NOPASSWD:/usr/bin/rsync 

il NOPASSWD:/usr/bin/rsync dice a sudo che quando il tuo utente esegue /usr/bin/rsync o solo rsync che non è necessaria nessuna password.

Quindi il tuo originale --rsync-path="sudo rsync" dovrebbe funzionare.

Hai bisogno di un metodo per fornire la password a sudo . Un programma askpass è progettato per chiedere password quando i meccanismi normali non sono disponibili. Impostazione di sudo per non richiedere una password per eseguire rsync quanto l'utente è un'opzione.

Normalmente configuro il login basato su chiave con restrizioni appropriate per casi come questo. Se si configura una chiave limitata che un'unica esecuzione rsync come root, allora questo tipo di cose diventa più facile da fare. Un'altra alternativa è quella di utilizzare un process rsycnd per gestire le richieste remote. La configuration fornisce una serie di restrizioni che possono essere applicate.

EDIT: Ho incluso uno script per impostare le chiavi per le parentesi basate su chiavi nella sezione Creazione di utenti in sezione Clienti del mio post su Configurazione di BackupPC su Linux . Vedere anche la documentazione relativa a ssh_config che contiene alcune delle cose che puoi fare con la restrizione dell'utilizzo dei tasti come mostrato nello script.

Sono stupito dalla complessità delle risposte esistenti. È molto più facile e conveniente configurare i propri sisthemes (il PC e l'host remoto) in modo che sia ansible connettersi come root all'host remoto senza utilizzare una password. E a differenza del suo aspetto, è anche sicuro .

  1. Nell'host remoto accertarsi che / etc / ssh / sshd_config abbia questa linea "PermitRootLogin senza password" (in molte distribuzioni è lì per impostazione predefinita). Ciò consente a root di get una shell di ssh utilizzando qualsiasi metodo di authentication eccetto il prompt di password insicura.
  2. (Se non lo sai già) seguire una delle tante lezioni su come get l'accesso tramite password tramite ssh
  3. Utilizzare rsync come normalmente fare e senza richieste di password.

Basta non dimenticare che fintanto che la row in /root/.ssh/authorized_keys dell'host remoto c'è che la macchina accetta i comandi root dal tuo PC.

Un altro metodo è quello di aggirare le restrizioni delle autorizzazioni avviando rsync sulla macchina remota. Invece di:

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

Tu puoi fare:

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

Dove yyyy è l'indirizzo IP della macchina locale. Questo funziona solo se la vostra macchina locale può agire come server SSH.

su macchina remota

 sudo apt install ssh-askpass which ssh-askpass 

quindi sulla macchina locale

 rsync -av -e 'ssh -X' --rsync-path='SUDO_ASKPASS=/usr/libexec/openssh/ssh-askpass sudo -A rsync' /some/local/path [email protected]:/some/remote/path 

sostituire il path di ssh-askpass con il path effettivo sulla macchina remota

source: http://unix.bris.ac.uk/2015/08/04/rsync-between-two-hosts-using-sudo-and-a-password-prompt/