Vue d’ensemble

La semaine dernière, j’ai écrit un article sur le module pexpect en Python et comment vous pouvez l’utiliser pour prendre en charge certains des besoins d’automatisation, comme ssh et ftp.

J’aimerais continuer sur ce sujet et écrire sur sa classe pxssh. Avec le module pxssh, il est facile d’accéder à d’autres serveurs par SSH. Cet article est basé sur la documentation officielle trouvée ici : http://pexpect.sourceforge.net/pxssh.html

Qu’est-ce que pxssh?

Pxssh est basé sur pexpect. Sa classe étend pexpect.spawn pour spécialiser la mise en place de connexions SSH. J’utilise fréquemment pxssh pour établir des connexions ssh en python.

Documentation du module

Ouvrez un terminal et tapez les commandes suivantes pour obtenir de l’aide sur le module

import pxsshhelp(pxssh)Help on module pxssh:NAME pxsshFILE /usr/lib/python2.7/dist-packages/pxssh.pyDESCRIPTION This class extends pexpect.spawn to specialize setting up SSH connections. This adds methods for login, logout, and expecting the shell prompt. $Id: pxssh.py 513 2008-02-09 18:26:13Z noah $CLASSES pexpect.ExceptionPexpect(exceptions.Exception) ExceptionPxssh pexpect.spawn(__builtin__.object) pxssh

Vous pouvez également voir l’aide ici http://pexpect.sourceforge.net/pxssh.html

Méthodes et processus de connexion

Pxssh ajoute des méthodes pour la connexion, la déconnexion, et l’attente de l’invite du shell. Il fait diverses choses délicates pour gérer de nombreuses situations dans le processus de connexion SSH.

Par exemple, si la session est votre première connexion, alors pxssh accepte automatiquement le certificat distant ; ou si vous avez configuré l’authentification par clé publique, alors pxssh n’attendra pas l’invite de mot de passe.

Comment fonctionne pxssh ?

pxssh utilise l’invite du shell pour synchroniser la sortie de l’hôte distant. Afin de rendre cela plus robuste, il définit l’invite du shell à quelque chose de plus unique que juste $ ou #.

Cela devrait fonctionner sur la plupart des shells de style Borne/Bash ou Csh.

Exemple

Cet exemple exécute quelques commandes sur un serveur distant et imprime le résultat.

D’abord nous importons les modules dont nous avons besoin. (pxssh et getpass)

Nous importons le module getpass, qui demandera à l’utilisateur un mot de passe, sans faire écho de ce qu’il tape à la console.

import pxsshimport getpasstry: s = pxssh.pxssh() hostname = raw_input('hostname: ') username = raw_input('username: ') password = getpass.getpass('password: ') s.login (hostname, username, password) s.sendline ('uptime') # run a command s.prompt() # match the prompt print s.before # print everything before the prompt. s.sendline ('ls -l') s.prompt() print s.before s.sendline ('df') s.prompt() print s.before s.logout()except pxssh.ExceptionPxssh, e: print "pxssh failed on login." print str(e)

Exécuter une commande sur un serveur SSH distant

Voyons un autre exemple. Pour exécuter une commande (‘uptime’) et imprimer la sortie, vous devez faire quelque chose comme ça :

import pxsshs = pxssh.pxssh()if not s.login ('localhost', 'myusername', 'mypassword'): print "SSH session failed on login." print str(s)else: print "SSH session login successful" s.sendline ('uptime') s.prompt() # match the prompt print s.before # print everything before the prompt. s.logout() #We can also execute multiple command like this:s.sendline ('uptime;df -h')

Pour plus d’informations sur pxssh, veuillez consulter la documentation officielle

Cet article a été modifié pour la dernière fois le 28 août 2020 10:53 am

.

Catégories : Articles

0 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *