Le contrôle de rsync avec Python?
J'ai eu envie d'écrire un script python pour exécuter plusieurs instances de rsync en séquence pour la sauvegarde de données sur un autre ordinateur.
À l'instant je viens d'avoir ce fichier texte avec la commande que j'utilise et je viens de copier-coller dans le terminal, et il semble un peu ridicule.
Je veux être en mesure d'utiliser python pour le faire pour moi. Je connais très vaguement comment utiliser les sous-processus.popen, mais je n'ai aucune idée de comment faire pour obtenir python pour interagir avec rsync directement, comme pour la saisie de mon mot de passe pour moi. Peut-python le faire?
Quelque chose comme:
if theProccess.proccessResponse == "Password:" :
theProccess.respond(string)
Ou est le meilleur que je peux faire est de simplement l'avoir, ou même un script bash, il suffit d'exécuter le rsyncs dans l'ordre et à taper mon mot de passe en plus et une fois de plus?
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez interagir avec un sous-processus en général, vous pouvez utiliser pexpect comme mentionné ailleurs. Mais pour votre cas particulier, en supposant que votre rsync est en cours d'exécution sur ssh (par défaut), vous souhaitez mai à envisager la création d'un ssh sans mot de passe connexion entre les deux armées, ce qui permettra d'éliminer le besoin d'entrer le mot de passe. C'est un en fonction de clé de la solution et sera beaucoup plus sûr que de stocker votre mot de passe dans votre code source.
Voici un blogueur qui décrit votre problème exact et décide d'aller avec ssh sans mot de passe.
Il y a un grand module Python écrit par Colin Stewart appelé RSyncBackup c'est peu connu et peu documenté, mais très utile.
Par défaut, il ne contient pas toutes les méthodes pour l'inclusion d'un mot de passe dans vos commandes rsync, j'ai donc modifié le module et en a parlé dans ce blog: http://technofart.blogspot.com/2012/02/rsync-controlled-by-python.html
Un lien vers mon modifiés module peut être trouvé dans la section de Téléchargement de mon post.
Une clé de la solution est aussi une bonne idée. Aussi, de nombreux rsync mise en œuvre va chercher la RSYNC_PASSWORD variable d'environnement, que vous pouvez définir. Il faut juste faire attention si vos variables d'environnement sont visibles par les autres utilisateurs.
J'utilise rsync pour sauvegarder tous mes clients des sites web. Un script est déclenchée par cron et il utilise des Makefiles pour chaque client en raison de leurs différents besoins.
Plutôt que de faire quelque chose qui saisit le mot de passe, utilisez la commande ssh-keygen pour créer une paire clé publique/privée et de mettre votre clé publique sur la machine distante. Cela vous donne sécurisé, pas de mot de passe des connexions. Cela signifie également que vous n'avez pas à exposer le port de rsync pour le monde. Après vous avez passé la courbe d'apprentissage sur ce (et ce n'est pas très raide) ssh est plus certainement votre ami.
Je me sens mal, de la réponse à cette fin, mais je me sens comme tout le monde, la réponse était fausse. Ils ont fait un PEU répondre à votre question, mais non pas directement comme ils pourraient avoir.
Plus au point, vous avait demandé comment saisir le mot de passe de manière interactive. Pour ce faire, je suggère le haut-getpass. En bref, vous n'êtes pas d'interagir avec rsync. Vous récupérez le mot de passe de l'utilisateur avant d'exécuter rsync, et en passant que dans rsync. Une autre option est de permettre à l'utilisateur de passer en option, la plupart de mes scripts ligne de commande utilisation optparse
Pour continuer, je suis tombé sur votre question, parce que je cherchais quelque chose de semblable. Juste un avis à quelqu'un d'autre là-bas, j'ai fini le référencement de ces deux débordement de pile liens:
l'appel de rsync de python sous-processus.appel
et
Python Sous-Processus.Popen à partir d'un thread
Je ne pense pas qu'il supporte rsync hors de la boîte, mais paramiko pourraient avoir certains composants que vous pourriez recycler?
Si vous avez besoin d'en programmant le contrôle d'un sous-processus, vous devriez regarder dans l'aide de pexpect.
The main features of Pexpect require the pty module in the Python standard library, which is only available on Unix-like systems.
Si vous avez juste besoin d'entrer le mot de passe, vous pouvez essayer de peupler le
RSYNC_PASSWORD
variable d'environnement ou de l'utilisation de la--password-file
option.J'ai fait un paquet appelé paralle_rsync qui n'commandes rsync en parallèle.
Vous pouvez l'utiliser à l'intérieur de tissu pour effectuer l'opération sur plusieurs hôtes en même temps.