Presentación
La semana pasada escribí un artículo sobre el módulo pexpect en Python y cómo puedes usarlo para encargarte de algunas necesidades de automatización, como ssh y ftp.
Me gustaría continuar con ese tema y escribir sobre su clase pxssh. Con el módulo pxssh, es fácil acceder a otros servidores a través de SSH. Este artículo está basado en la documentación oficial que se encuentra aquí: http://pexpect.sourceforge.net/pxssh.html
¿Qué es pxssh?
Pxssh está basado en pexpect. Su clase extiende pexpect.spawn para especializar la configuración de las conexiones SSH. Yo uso pxssh frecuentemente para hacer conexiones ssh en python.
Documentación del módulo
Abre un terminal y escribe los siguientes comandos para obtener ayuda sobre el módulo
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
También puedes ver la ayuda aquí http://pexpect.sourceforge.net/pxssh.html
Métodos y proceso de login
Pxssh añade métodos para el login, logout, y esperar el prompt del shell. Hace varias cosas complicadas para manejar muchas situaciones en el proceso de inicio de sesión SSH.
Por ejemplo, si la sesión es su primer inicio de sesión, entonces pxssh acepta automáticamente el certificado remoto; o si tiene configurada la autenticación de clave pública entonces pxssh no esperará el prompt de la contraseña.
¿Cómo funciona pxssh?
pxssh utiliza el prompt de la shell para sincronizar la salida del host remoto. Para hacer esto más robusto establece el prompt de la shell a algo más único que simplemente $ o #.
Esto debería funcionar en la mayoría de las shells de estilo Borne/Bash o Csh.
Ejemplo
Este ejemplo ejecuta algunos comandos en un servidor remoto e imprime el resultado.
Primero importamos los módulos que necesitamos. (pxssh y getpass)
Importamos el módulo getpass, que pedirá la contraseña al usuario, sin hacer eco de lo que escriba en la consola.
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)
Ejecutar un comando en un servidor SSH remoto
Mostramos un ejemplo más. Para ejecutar un comando (‘uptime’) e imprimir la salida, hay que hacer algo así :
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')
Para más información sobre pxssh, consulta la documentación oficial
Este post fue modificado por última vez el agosto 28, 2020 10:53 am
0 comentarios