{{tag>astuces rsync ubuntu sudo transfert fichier}}
====== Rsync sous ubuntu avec sudo des deux cotés ======
Ubuntu ne propose pas de compte root donc pour faire un "rsync [options] root@machine1:/chemin1/ root@machine2:/chemin2/" les choses se compliquent un peu.
rsync ne permet pas ce fonctionnement ou la source et la destination sont deux machines distinctes, il s'agit d'une commande conceptuelle :p
Pas de panique, c'est tout de même possible de faire ce rsync :
===== Methode 1 - sudo temporaire =====
==== Préparation ====
Se logguer sur la machine cible, et s'accorder les droits de sudo sur rsync avec son utilisateur :
* lancer la commande sudo visudo :monUser@machine-cible:~$ sudo visudo
* Ajouter la ligne :
monUser ALL=NOPASSWD: /usr/bin/rsync
* Enregistrer et quitter l'editeur
==== Copie des données ====
* Se connecter sur la machine source
* Lancer la commande suivante pour lancer le transfert :
monUser@machine-source:~$ sudo rsync -avrp -t -e 'ssh -l monUser' --rsync-path "sudo rsync" /chemin1/ machine-cible:/chemin2/
Il faut bien sur adapter les options et les chemins à ce que vous voulez faire
Ca y est on a réussi a rsync des fichiers locaux que seul l'utilisateur root peut lire vers une machine distante ou seul l'utilisateur root peut ecrire :-)
Merci ubuntu :-)
===== Methode 2 - ssh-agent =====
Utiliser ssh-agent pour faire ce rsync :
* se connecter a la machine cible en forwardant l'authentification la connexion a l'agent SSH depuis son poste :
ssh monUser@machine-cible -A
* sur la machine cible, récupérer et exporter le chemin du socket ssh-agent :
monUser@machine-cible:~$ env | grep SSH_AUTH_SOCK
* lancer un shell root en sudo :
monUser@machine-cible:~$ sudo -s
* faire un export de cette variable, comme par exemple :
machine-cible:~# export SSH_AUTH_SOCK=/tmp/ssh-LaSyd12725/agent.12725
* il suffit ensuite de faire le rsync come si de rien n'etait :
machine-cible:~# rsync -avrp -t machine-source:/chemin1/ /chemin2/
Cette méthode a l'avantage de ne pas devoir mettre un sudo temporaire pour ce rsync