Je dois exécuter rsync
, sans que cela me demande un mot de passe.
J'ai vu dans la rsync
page 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 rsync
je 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:
- Je comprends que c'est une mauvaise idée du point de vue de la sécurité
- Je ne dois utiliser que
rsync
, je ne peux pas utiliser d'autres logiciels - Je ne peux pas utiliser l'authentification par clé
- J'ai déjà lu de nombreuses questions sur SE, par exemple:
comment-passer-mot-de-passe-pour-rsync-ssh-commande @ stackoverflow.com
rsync-cron-job-avec-un-mot de passe @ superuser.com
comment configurer -rsync-sans-mot-de-passe-avec-ssh-on-unix-linux @ superuser.com
En d'autres termes, il faut que l' RSYNC_PASSWORD
approche fonctionne! :-)
Réponses:
Cette variable d’environnement de mot de passe ne semble être utilisée que lors de l’utilisation du protocole rsync:
Pour que cela fonctionne, vous devez également exécuter rsync en tant que démon (
--daemon
option), ce qui est souvent fait avecinetd.conf
.Lors de l'utilisation de ce protocole,
abc
doit correspondre à une cible définie dans/etc/rsyncd.conf
. Le nom d'utilisateur doit figurer dans uneauth users
ligne pour cette cible et un fichier de mot de passe doit être spécifié avec l'secrets file
option.C'est ce fichier secret qui contient les correspondances entre les noms d'utilisateur et les mots de passe au format suivant:
Et c'est ce mot de passe que vous pouvez spécifier à l'aide de la variable d'environnement RSYNC_PASSWORD.
la source
Si le
rsync
dé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 utilisersshpass
:Notez l'espace au début de la commande. Dans le
bash
shell, cela empêchera l'enregistrement de la commande (et du mot de passe) dans l'historique. Je ne recommande pas d'utiliser laRSYNC_PASSWORD
variable 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 utilisertput reset
pour effacer l’historique de votre terminal.la source
sshpass -p $(cat passFile) ..
cacher une passe claire dans l'histoire bash, et chmod 400 sur passeFichier pour la sécuriser-p "$RSYNC_PASSWORD"
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_rsa
ou 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.
Vous pouvez également ajouter des arguments
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
pour 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!la source
~/.ssh
dossier à 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)Très utile pour les scripts est d'utiliser l'
--password-file
option de ligne de commande.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.
la source