62 votes

Exécuter rsync avec les droits de l'utilisateur root sur la machine distante

Je veux synchroniser un dossier de ma machine avec un dossier sur une machine distante. Le dossier distant ne peut être manipulé que par root . Je dispose d'un compte sur la machine distante qui peut utiliser sudo . Comment puis-je exécuter rsync de manière à ce qu'il dispose des droits d'accès root sur la machine distante ?

J'ai essayé ce qui suit :

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="sudo rsync"

Mais (après avoir entré mon mot de passe) j'obtiens l'erreur suivante :

sudo: no tty present and no askpass program specified

38voto

Isik Mater Points 119

Essayez cette solution. Dans votre fichier sudoers ( /etc/sudoers ) configurer votre utilisateur comme suit :

username ALL= NOPASSWD:/usr/bin/rsync

les NOPASSWD:/usr/bin/rsync raconte sudo que lorsque votre utilisateur exécute /usr/bin/rsync ou simplement rsync qu'aucun mot de passe n'est nécessaire.

Dans ce cas, votre --rsync-path="sudo rsync" devrait fonctionner.

15voto

Jared K Points 101

Voici la solution que j'ai trouvée :

rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S  mkdir -p /remote/lovely/folder && sudo rsync" /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete

Une mission un peu particulière !

12voto

ndemou Points 736

Je suis étonné par la complexité des réponses existantes ! C'est loin Il est plus facile et plus pratique de configurer vos systèmes (votre PC et l'hôte distant) de manière à ce que vous puissiez vous connecter en tant que root à l'hôte distant sans utiliser de mot de passe. Et même si cela semble effrayant il est assez sûr .

  1. Sur l'hôte distant, assurez-vous que le fichier /etc/ssh/sshd_config contient la ligne "PermitRootLogin without-password" (dans de nombreuses distributions, cette ligne est présente par défaut). Cela permet à root d'obtenir un Shell ssh en utilisant n'importe quelle méthode d'authentification. sauf l'invite de mot de passe non sécurisé.
  2. (Si vous ne savez pas encore comment faire), suivez l'un des liens suivants de nombreux tutoriels sur la manière d'obtenir une connexion sans mot de passe via ssh
  3. Utilisez rsync comme vous le feriez normalement, sans demander de mot de passe.

N'oubliez pas que tant que la ligne dans /root/.ssh/authorized_keys de l'hôte distant est présente, cette machine accepte les commandes root de votre PC.

11voto

Mike Scott Points 6062

La solution proposée sur ce blog a très bien fonctionné pour moi : http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .

En principe :

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

La première ligne permet la saisie interactive du mot de passe, sans l'afficher à l'écran. Cela fonctionne très bien pour moi sur Ubuntu 9.04.

6voto

wotanii Points 150

Sur une machine distante

sudo apt install ssh-askpass
which ssh-askpass

puis sur la machine locale

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

remplacer le chemin d'accès à ssh-askpass par le chemin d'accès réel sur la machine distante

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X