Je souhaite synchroniser un dossier de ma machine avec un dossier sur une machine distante. Le dossier distant ne peut être manipulé que par root
. J'ai un compte sur la machine distante qui peut utiliser sudo
. Comment puis-je exécuter rsync de sorte qu'il dispose des autorisations root sur la machine distante?
J'ai essayé ce qui suit:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/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
Réponses:
Essayez cette solution. Dans votre fichier sudoers (
/etc/sudoers
), configurez votre utilisateur comme ceci:le
NOPASSWD:/usr/bin/rsync
ditsudo
que lorsque votre utilisateur exécute/usr/bin/rsync
ou tout simplementrsync
qu'aucun mot de passe est nécessaire.Ensuite, votre original
--rsync-path="sudo rsync"
devrait fonctionner.la source
Voici la solution que j'ai trouvée:
Un peu de mission!
la source
ps aux
). Testez:,rsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/example
puis ouvrez le terminal sur la machine distante etps aux | grep find
.find /
est utilisé uniquement car c'est la première chose qui m'est venue à l'esprit avec une grande durée d'exécution.La solution sur ce blog a très bien fonctionné pour moi: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .
Fondamentalement:
La première ligne permet la saisie interactive du mot de passe, sans afficher le mot de passe à l'écran. Fonctionne très bien pour moi sur Ubuntu 9.04.
la source
!tty_tickets
.ssh -t [other options]
lieu de jouer avecstty -echo
?tty_tickets
toute façon ... donc je peux essayer cette approche.sudo: no tty present and no askpass program specified
Vous avez besoin d'une méthode pour fournir le mot de passe
sudo
. Unaskpass
programme est conçu pour demander des mots de passe lorsque les mécanismes normaux ne sont pas disponibles. La configurationsudo
pour ne pas nécessiter de mot de passe pour fonctionnerrsync
car votre ID utilisateur est une option.Je configure normalement une connexion basée sur des clés avec des restrictions appropriées pour des cas comme celui-ci. Si vous configurez une clé restreinte qui ne s'exécute qu'en
rsync
tant que root, ce genre de chose devient plus facile à faire. Une autre alternative consiste à utiliser unrsycnd
processus pour gérer les requêtes distantes. La configuration fournit une variété de restrictions qui peuvent être appliquées.EDIT: J'ai inclus un script pour configurer les clés pour les loings basés sur les clés dans la section Création d'utilisateurs sur les clients de mon article sur la configuration de BackupPC sur Linux . Voir aussi la documentation de ssh_config qui détaille certaines des choses que vous pouvez faire pour restituer l'utilisation des clés comme indiqué dans le script.
la source
sur une machine distante
puis sur la machine locale
remplacer le chemin vers ssh-askpass par le chemin 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/
la source
Je suis étonné de la complexité des réponses existantes. Il est beaucoup plus facile et pratique de configurer vos systèmes (votre PC et l'hôte distant) afin de pouvoir vous connecter en tant que root à l'hôte distant sans utiliser de mot de passe. Et contrairement à son apparence, il est également sécurisé .
N'oubliez pas que tant que la ligne dans /root/.ssh/authorized_keys de l'hôte distant est là, cette machine accepte les commandes root de votre PC.
la source
Voici ce qui a fonctionné pour moi, étant donné que je veux conserver l'authentification par mot de passe (donc je ne veux pas utiliser de
NOPASSWD
clés) - sur Ubuntu 14.04:sudo
sur une machine distante en désactivanttty_tickets
via un fichier temporaire dans/etc/sudoers.d/
(qui devrait être supporté sur Debian, voir/etc/sudoers.d/README
), et "Mettre à jour les informations d'identification mises en cache de l'utilisateur", qui "prolonge le délai d'attente sudo pendant 15 minutes supplémentaires"rsync
avecsudo
comme indiqué dans les autres réponsessudo
sur la machine distante en supprimant le fichier temporaire dans/etc/sudoers.d/
, ce qui réactivetty_tickets
... ou, avec des lignes de commande:
Voici les réponses que j'obtiens lors de l'exécution de ces commandes sur la machine locale:
Notez que cela
sudo -v
devrait être exécuté après chaque fois que les fichiers sont entrés/etc/sudoers.d/
, afin que les modifications y soient acceptées.la source
Une autre méthode consiste à contourner les restrictions d'autorisations en lançant rsync sur la machine distante. Au lieu de:
Tu peux faire:
Où
y.y.y.y
est l'adresse IP de votre machine locale. Cela ne fonctionne que si votre machine locale peut servir de serveur SSH.la source
Ma solution consiste à ajouter
--rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"
Exemple:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder [email protected]:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"
Ce n'est généralement pas une bonne idée de mettre des mots de passe dans une ligne de commande à une ligne; ils deviennent visibles par exemple dans l'arborescence des processus. Je remplace parfois le mot de passe réel dans ce type de déclaration par $ (cat my_password.txt) qui est légèrement meilleur
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"
la source