Je voudrais utiliser rsync dans un script python. Je l'appelle à l'aide du subprocess
module et je m'authentifie à l' aide de clés publiques stockées dans le authorized_key
fichier sur la machine distante.
Le seul problème est que lorsque j'utilise rsync en utilisant un mauvais nom d'utilisateur distant, je suis invité à entrer un mot de passe, ce qui arrête évidemment le script de sauvegarde pour toujours.
Puis-je forcer rsync
à quitter avec erreur s'il ne peut pas s'authentifier, plutôt que de demander un mot de passe?
Udi
re: suggestion de James (ne lui donnant pas tty), pour le sous-processus, essayez de mettre stdin = None comme paramètre à Popen.
la source
Commencez par faire fonctionner rsync à partir du shell, la commande devrait ressembler à ceci.
Si cela échoue, déboguez la commande ssh seule. Lorsque tout fonctionne, voyez ce qui se passe pour le script python
Ce n'est pas un mauvais tutoriel
la source
Selon la façon dont vous lancez rsync, ne pas lui donner de TTY ou PTY peut aider.
De nombreux programmes vérifient s'ils ont un ATS de contrôle avant de décider d'inviter l'utilisateur à entrer. Le comportement par défaut de system () et des appels similaires est de fournir un tty aux sous-programmes, mais vous pouvez le désactiver.
Il peut également être possible de désactiver l'authentification par mot de passe entièrement du côté distant si vous contrôlez les deux systèmes et que vous souhaitez vous éloigner de l'authentification par mot de passe pour les avantages de sécurité tout en résolvant ce problème.
Si vous faites rsync sur SSH, vous pouvez ajouter ce qui suit à votre fichier ssh_config pour l'hôte en question, ou via le commutateur de ligne de commande -o:
Sur un test rapide (juste ssh, pas rsync) qui a entraîné la fermeture immédiate de SSH lorsque ma clé publique n'a pas été acceptée sans me demander de mot de passe.
la source