Cuando se trata de redes, existe una amplia gama de perspectivas y no se puede dominar cómo interactuar con todos los dispositivos en el mundo real. Sin embargo, todos los dispositivos de red comparten una funcionalidad similar que, cuando se domina, se pueden automatizar.
Como mencioné en mis otros tutoriales, los programadores son perezosos y siempre buscan mejorar la eficiencia, por lo que hacen el menor trabajo 🙂, y cuando se trata de automatizar problemas relacionados con la red, muchos a menudo aprovechan la oportunidad.
En la guía rápida de hoy, le presentaré la automatización de SSH utilizando dos bibliotecas populares de Python: Paramiko y Netmiko. Crearemos scripts de Python simples usando las dos bibliotecas para automatizar SSH e interactuar con dispositivos de red.
Elegí este enfoque porque una guía centrada principalmente en las diferencias entre Paramiko y Netmiko sería demasiado corta (una tabla simple sería suficiente) y no concreta. Al adoptar este enfoque, podrá experimentar mejor con ellos y ver cuál hace qué y cómo.
Empecemos:
Que es Paramiko?
El sitio web oficial define Paramiko de la siguiente manera:
"Paramiko es una Python (2.7, 3.4+) implementación del protocolo SSHv2 que proporciona funcionalidad tanto de cliente como de servidor."
Espero que haya quedado claro. Fundamentalmente, significa Paramiko es una biblioteca de Python para interactuar con SSH.
Ahora:
Cuando queremos iniciar sesión en un servidor, sabemos que vamos al terminal-cmd, xterm, MobaXterm, o simplemente al Gnome Terminal-login, luego ejecutamos los comandos.
Veamos cómo puede ayudar Paramiko con eso.
Cómo instalar Paramiko
Para usar Paramiko, necesitamos instalarlo. Debe tener Python, preferiblemente python 2, instalado en su máquina. Usando pip, ingrese el siguiente comando para instalar Paramiko.
sudo pip instalar ParamikoPython -m pip instalar paramiko
Si está buscando compilar desde la fuente, consulte el repositorio oficial de Paramiko GitHub utilizando el recurso proporcionado:
https: // github.com / paramiko / paramiko
Conexión a SSH usando Paramiko
Para conectarnos a SSH usando Paramiko, usamos el método connect (), que requiere el parámetro de nombre de host; también admite otros parámetros, pero como no los requerimos, podemos ignorarlos por ahora.
connect (hostname, port = 22, username = None, password = None, pkey = None, key_filename = None, timeout = None, allow_agent = True, look_for_keys = True, compress = False, sock = None, gss_auth = False, gss_kex = False, gss_deleg_creds = True, gss_host = None, banner_timeout = None, auth_timeout = None, gss_trust_dns = True, passphrase = None, disabled_algorithms = None)Usando esta función, que está disponible en paramiko. Cliente.SSHClient.connect (), se conecta al nombre de host especificado y lo autentica. El sistema de destino se verifica con las claves del sistema local existentes (confiable).
Si tiene un archivo de host específico, puede usar el método load_host_keys () y configurar el cliente SSH de Paramiko para agregar cualquier host desconocido a paramiko.AutoAddPolicy (). Si está utilizando el cliente en sistemas que no son de confianza, evite utilizar el paramiko.AutoAddPolicy.
Conexión SSH con contraseña
Desde el método de conexión, podemos ver que tenemos los parámetros de nombre de usuario y contraseña que podemos usar para conectarnos al sistema. Considere el siguiente código para conectar SSH a través de nombre de usuario y contraseña.
desde paramiko import util, SSHClient, AutoAddPolicycliente = SSHClient ()
cliente.load_system_host_keys ()
cliente.load_host_keys ("/ inicio / linuxhint /.ssh / hosts_conocidos ")
cliente.set_missing_host_key_policy (AutoAddPolicy ())
cliente.conectar (nombre de host = "linuxhint.com ", nombre de usuario =" admin ", contraseña =" AdminPassword ")
cliente.cerca()
Si encuentra problemas al importar la clase Paramiko SSHClient, consulte la siguiente pregunta de stackoverflow:
https: // stackoverflow.com / questions / 29378234 / python-import-paramiko-error-can't-import-name-util
Conexión SSH a través de clave
Como todos sabemos, conectar SSH a través de una clave es más seguro que usar una contraseña sin formato. Paramiko lo sabe y le permite pasar el archivo de claves y conectarse al sistema de destino.
Considere el siguiente código.
desde paramiko importar SSHClientde paramiko AutoAddPolicy
cliente = SSHClient ()
cliente.load_system_host_keys ()
cliente.load_host_keys ('/ inicio / linuxhint /.ssh / hosts_conocidos ')
cliente.set_missing_host_key_policy (AutoAddPolicy ())
cliente.conectar ('linuxhint.com ', username =' admin ', key_filename =' ssh_key.pem ', contraseña =' AdminPassphrase ')
cliente.cerca()
Ejecución de comandos a través de SSH
Una vez que obtenga acceso al sistema usando SSH (sobre Paramiko), puede ejecutar una serie de comandos. Considere el siguiente fragmento de código:
cliente = SSHClient ()cliente.load_system_host_keys ()
cliente.conectar ('linuxhint.com ')
stdin, stdout, stderr = cliente.exec_command ('bash ”)
stdin.cerca()
stdout.cerca()
stderr.cerca()
cliente.cerca()
En este punto, sabe cómo usar la biblioteca Paramiko para automatizar SSH. Como puede imaginar, esta no es una guía completa de Paramiko, y no nos sumergimos en detalles relacionados con lo que hace la herramienta. El objetivo era mostrarte su implementación.
Para obtener más información, consulte materiales más completos como:
https: // documentos.paramiko.org / en / estable /
https: // github.com / paramiko / paramiko
Que es Netmiko?
Netmiko es muy popular y similar a Paramiko con algunas diferencias significativas:
- Soporte de dispositivo
- Actuación
Cuando trabaje en redes del mundo real, se encontrará con varios modelos de dispositivos. Por lo tanto, necesita una herramienta confiable que pueda ayudarlo a automatizar el proceso. En algunos casos, no puede usar Paramiko debido a las limitaciones de soporte del dispositivo, lo que genera retrasos y fallas; puede verificar los dispositivos compatibles en la documentación oficial. También es considerablemente más lento que Netmiko.
Paramiko es más un módulo SSH genérico que puede usar para automatizar tareas SSH específicas. Por el contrario, Netmiko es más amplio y está bien optimizado para administrar dispositivos de red como conmutadores y enrutadores.
La abstracción es la otra ventaja de usar Netmiko. Netmiko proporciona una función simple que puede usar para deshabilitar la paginación. Por ejemplo, un resultado de la sesión SSH puede tener más de una página. Al usar sesiones SSH regulares, tendrá que agregar un espacio similar a una entrada para mostrar la página siguiente. Netmiko le proporciona una forma de anular este.
Las ventajas de Netmiko sobre Paramiko son:
- Conéctese automáticamente a través de SSH a dispositivos de red.
- Proporciona una ejecución más sencilla de los comandos de shows y la salida de datos.
- Proporciona una funcionalidad más sencilla para los comandos de configuración, incluidas las acciones de confirmación.
- Soporte multidispositivo en plataformas y proveedores de dispositivos de red.
Cómo instalar Netmiko
La instalación de Netmiko también es relativamente fácil:
Todo lo que tiene que hacer es asegurarse de tener Python y pip instalados en su sistema y ejecutar el comando:
pip instalar netmikopython -m pip instalar netmiko
Conexión a SSH mediante Netmiko
Conectarse a sesiones SSH del dispositivo usando Netmiko es muy simple. Recuerde que Netmiko está más optimizado para dispositivos como enrutadores y no para SSH genérico.
Considere el fragmento de código a continuación.
#importar módulosdesde netmiko import ConnectHandler
# información del dispositivo en formato de diccionario.
device_config =
"Device_type": "cisco_ios",
"Ip": "192.168.0.1 ”,
"Nombre de usuario": "admin",
"Contraseña": "contraseña",
"contraseña secreta"
conexión = ConnectHandler (** device_config)
Usando el código simple anterior, tendrá una conexión SSH al dispositivo. También puede pasar la información del dispositivo directamente en lugar de pasarla a un diccionario.
Una vez que tenga una sesión SSH, puede ejecutar comandos usando la función send_command (). Las funciones admitidas por netmiko incluyen:
Métodos de uso común de Netmiko:
- net_connect.send_command (): esta función envía comandos por un canal de red y devuelve la salida según el patrón.
- net_connect.send_command_timing (): devuelve la salida basada en el tiempo de un comando enviado por un canal de red.
- net_connect.send_config_set (): aplica los ajustes de configuración a los dispositivos remotos.
- net_connect.send_config_from_file (): aplica los ajustes de configuración de un archivo externo
- net_connect.save_config (): exporta y guarda la configuración en ejecución como configuración de inicio.
- net_connect.enable (): consulta el dispositivo para activar el modo de habilitación.
- net_connect.find_prompt () - Devuelve el indicador actual del enrutador
- net_connect.commit (): ejecuta comandos de confirmación en dispositivos como Juniper e IOS-XR
- net_connect.desconectar () - Termina las sesiones
- net_connect.write_channel (): habilita la escritura de bajo nivel
- net_connect.read_channel () - Habilita la lectura de bajo nivel.
Como se mencionó anteriormente, esta no es una guía sobre cómo usar Netmiko, sino una dirección simple de lo que son Netmiko y Paramiko. Consulta la documentación oficial para más información.
https: // github.com / ktbyers / netmiko
Conclusión
En esta guía rápida, discutimos cómo usar paramiko para conexiones SSH genéricas y administración de dispositivos de red Netmiko, ilustrando las diferencias entre los dos.
Para concluir:
Paramiko | Netmiko |
Útil para uso genérico de ssh | Más útil para la configuración de dispositivos de red. |
Soporte limitado para una amplia gama de dispositivos de red. | Admite una amplia gama de dispositivos de red. |