Comment puis-je rsync sans invite pour mot de passe, sans utiliser l'authentification par clé publique?

45

Je dois exécuter rsync, sans que cela me demande un mot de passe.

J'ai vu dans la rsyncpage de manuel que cela ne permet pas de spécifier le mot de passe comme argument de ligne de commande.
Mais j'ai remarqué que cela permet de spécifier le mot de passe via la variable RSYNC_PASSWORD.

J'ai donc essayé d'exporter la variable, mais rsyncje continue à me demander un mot de passe.

export RSYNC_PASSWORD="abcdef"
rsync [email protected]:/abc /def

Qu'est-ce que je fais mal?

Veuillez considérer:

En d'autres termes, il faut que l' RSYNC_PASSWORDapproche fonctionne! :-)

Dor
la source
avez-vous activé le démon rsync sur un serveur distant?
Rahul Patil

Réponses:

13

Cette variable d’environnement de mot de passe ne semble être utilisée que lors de l’utilisation du protocole rsync:

rsync rsync://[email protected]:/abc /def

Pour que cela fonctionne, vous devez également exécuter rsync en tant que démon ( --daemonoption), ce qui est souvent fait avec inetd.conf.

Lors de l'utilisation de ce protocole, abcdoit correspondre à une cible définie dans /etc/rsyncd.conf. Le nom d'utilisateur doit figurer dans une auth usersligne pour cette cible et un fichier de mot de passe doit être spécifié avec l' secrets fileoption.

C'est ce fichier secret qui contient les correspondances entre les noms d'utilisateur et les mots de passe au format suivant:

username:password

Et c'est ce mot de passe que vous pouvez spécifier à l'aide de la variable d'environnement RSYNC_PASSWORD.

brm
la source
un moyen rapide d'exécuter un serveur rsync consiste à https://s3.amazonaws.com/skaperen/rsend
Skaperen
65

Si le rsyncdémon ne s'exécute pas sur la machine cible et que vous ne vous souciez pas d'exposer les mots de passe à tous les utilisateurs de la machine locale ( pourquoi personne ne devrait-il utiliser des mots de passe dans la ligne de commande? ), Vous pouvez utiliser sshpass:

 sshpass -p "password" rsync [email protected]:/abc /def

Notez l'espace au début de la commande. Dans le bashshell, cela empêchera l'enregistrement de la commande (et du mot de passe) dans l'historique. Je ne recommande pas d'utiliser la RSYNC_PASSWORDvariable sauf en cas d'absolue nécessité (conformément à une modification précédente de cette réponse), je recommande de supprimer le stockage de l'historique ou au moins de le supprimer après. En outre, vous pouvez utiliser tput resetpour effacer l’historique de votre terminal.

Graeme
la source
2
Pourquoi suggéreriez-vous d'ajouter du texte en clair sur le mot de passe à une commande? C'est mal admin linux admin 101.
Eddie
Super pratique .. cherchait une approche à ce problème depuis un moment. Merci.
Isaac Gregson
6
Bien qu’il soit mauvais d’ajouter le mot de passe en texte clair, c’est actuellement le seul moyen relativement simple d’y parvenir.
Weston Ganger
15
vous pouvez toujours faire quelque chose comme ceci: sshpass -p $(cat passFile) ..cacher une passe claire dans l'histoire bash, et chmod 400 sur passeFichier pour la sécuriser
Kresimir Pendic le
3
Je sais que c'est vieux, mais pour les nouveaux lecteurs, veuillez citer le mot de passe - les mots de passe peuvent contenir des caractères spéciaux et des espaces. -p "$RSYNC_PASSWORD"
Paddy Landau
16

Vous pouvez utiliser les identités ssh standard pour vous connecter sans mot de passe. Ceci est géré par défaut si vous avez un ~/.ssh/id_rsaou autre, mais vous pouvez aussi coder votre propre chemin vers la clé privée d'une paire de clés autorisée.

Cela permet le traitement par lots / script sans exposer les mots de passe, et la clé publique peut être supprimée du serveur cible si la clé privée est un jour compromise.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

Vous pouvez également ajouter des arguments -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullpour ne pas forcer la vérification de la clé de l'hôte distant. ! Attention - cela ouvre l'homme au milieu des attaques et c'est une mauvaise pratique en général!

Eddie
la source
1
Ceci est particulièrement utile si vous utilisez le nouveau shell Bash pour Windows 10. Je me demandais pourquoi rsync ne fonctionnait pas sans mot de passe. J'ai réalisé qu'il utilisait le ~/.sshdossier à l'intérieur du shell (où réside rsync). Une fois que j'ai utilisé -e pour indiquer la clé à l'intérieur /mnt/c/Users/MyUsername/.ssh, cela a fonctionné comme prévu. (Merci.: D)
Toby Deshane
12

Très utile pour les scripts est d'utiliser l' --password-fileoption de ligne de commande.

  • Créer un fichier vide appelé rsync_pass
  • écrire le mot de passe dans ce fichier (rien de plus)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Cela peut être utilisé pour les scripts et permet d’être plus sûr que d’exporter un mot de passe en variable système.

Arunas Bartisius
la source
4
Note au lecteur: cela nécessite également un démon rsync exécuté sur le serveur. J'espérais vraiment que les clés ssh seraient suffisantes pour rsync sans mot de passe.
Sridhar Sarnobat
IMHO c'est la seule façon correcte de le faire si on ne veut pas utiliser ssh.
maxf130
Cette réponse est la plus logique
AJ Meyghani