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 .
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/