Saltar al contenido

Conexión SSH con Python – PythonForBeginners.com

Visión general

La semana pasada escribí un artículo sobre el módulo pexpect en Python y cómo puede usarlo para atender algunas de las 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 se basa en la documentación oficial que se encuentra aquí: http://pexpect.sourceforge.net/pxssh.html

¿Qué es pxssh?

Pxssh se basa en pexpect. Su clase extiende pexpect.spawn para especializarse en la configuración de conexiones SSH. Utilizo pxssh con frecuencia para hacer conexiones ssh en python.

Documentación del módulo

Abra una terminal y escriba los siguientes comandos para obtener ayuda sobre el módulo

import pxssh
help(pxssh)

Help on module pxssh:

NAME
   pxssh

FILE
   /usr/lib/python2.7/dist-packages/pxssh.py

DESCRIPTION
   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 inicio de sesión

Pxssh agrega métodos para iniciar sesión, cerrar sesión y esperar el indicador de 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, pxssh acepta automáticamente el certificado remoto; o si tiene una configuración de autenticación de clave pública, pxssh no esperará a que se le solicite la contraseña.

¿Cómo funciona pxssh?

pxssh usa el indicador de shell para sincronizar la salida del host remoto. Para hacer esto más robusto, establece el indicador de shell en algo más exclusivo que solo $ o #.

Esto debería funcionar en la mayoría de los 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 le pedirá al usuario una contraseña, sin hacer eco de lo que escribe en la consola.


import pxssh
import getpass
try:                                                            
    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)

Ejecute un comando en un servidor SSH remoto

Demos un ejemplo más. Para ejecutar un comando (‘tiempo de actividad’) e imprimir la salida, debe hacer algo como eso:

import pxssh
s = 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 obtener más información sobre pxssh, consulte el documentación

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.