Tecnología que te entiende
Python para redes: automatiza tu infraestructura con Netmiko
Programación

Python para redes: automatiza tu infraestructura con Netmiko

05 Mar 2026 3 min de lectura 957 vistas

Configurar 50 switches manualmente es trabajo de días. Con Python y Netmiko, es trabajo de minutos. La automatización de redes ya no es opcional — es la habilidad que separa a los ingenieros de redes del futuro de los del pasado.

¿Qué es Netmiko?

Netmiko es una biblioteca Python que simplifica las conexiones SSH a dispositivos de red: routers Cisco, switches Juniper, firewalls Palo Alto y muchos más. Está construida sobre Paramiko (SSH para Python) pero agrega una capa de abstracción que hace que trabajar con CLI de dispositivos sea muy sencillo.

💡 Netmiko vs Paramiko: Paramiko es el SSH puro de Python — poderoso pero complejo para dispositivos de red. Netmiko envuelve Paramiko y agrega manejo automático de prompts, timeouts y formatos específicos de cada vendor. Para redes, usa Netmiko.

Instalación

# Instalar Netmiko
pip install netmiko

# Verificar instalación
python -c "import netmiko; print(netmiko.__version__)"

Conexión básica a un router Cisco

El bloque fundamental de cualquier script con Netmiko es el diccionario de dispositivo y la conexión:

from netmiko import ConnectHandler

# Definir el dispositivo
router = {
    'device_type': 'cisco_ios',    # tipo de dispositivo
    'host': '192.168.1.1',         # IP del dispositivo
    'username': 'admin',
    'password': 'cisco123',
    'secret': 'enable_pass',       # contraseña de enable (si aplica)
    'port': 22,                    # puerto SSH (22 por defecto)
}

# Conectar y ejecutar un comando
with ConnectHandler(**router) as conn:
    conn.enable()                          # entrar a modo privilegiado
    output = conn.send_command('show ip interface brief')
    print(output)

Tipos de dispositivos soportados

Netmiko soporta más de 80 tipos de dispositivos. Los más comunes:

Vendor device_type
Cisco IOS cisco_ios
Cisco NX-OS cisco_nxos
Juniper JunOS juniper_junos
MikroTik RouterOS mikrotik_routeros
Linux (SSH genérico) linux

Enviar configuración a múltiples dispositivos

Aquí es donde Netmiko realmente brilla. Imagina que necesitas configurar una VLAN en 20 switches:

from netmiko import ConnectHandler

# Lista de switches
switches = [
    {'host': '192.168.1.10', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco123'},
    {'host': '192.168.1.11', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco123'},
    {'host': '192.168.1.12', 'device_type': 'cisco_ios', 'username': 'admin', 'password': 'cisco123'},
    # ... más switches
]

# Comandos de configuración
nueva_vlan = [
    'vlan 100',
    'name ESTUDIANTES',
    'exit',
    'interface vlan 100',
    'description Red de estudiantes',
    'ip address 10.100.0.1 255.255.255.0',
    'no shutdown',
]

# Aplicar en todos los switches
for dispositivo in switches:
    try:
        with ConnectHandler(**dispositivo) as conn:
            conn.enable()
            output = conn.send_config_set(nueva_vlan)
            conn.save_config()  # equivale a "write memory"
            print(f"✅ {dispositivo['host']} — configurado correctamente")
    except Exception as e:
        print(f"❌ {dispositivo['host']} — Error: {e}")

Leer inventario desde un archivo

Para redes grandes, mantener los dispositivos en el script es impráctico. Lo mejor es leerlos desde un archivo CSV o YAML:

import csv
from netmiko import ConnectHandler

# dispositivos.csv:
# host,username,password,device_type
# 192.168.1.10,admin,cisco123,cisco_ios
# 192.168.1.11,admin,cisco123,cisco_ios

with open('dispositivos.csv') as f:
    reader = csv.DictReader(f)
    for row in reader:
        with ConnectHandler(**row) as conn:
            output = conn.send_command('show version | include Version')
            print(f"{row['host']}: {output.strip()}")

Guardar la salida en archivos de log

from netmiko import ConnectHandler
from datetime import datetime

fecha = datetime.now().strftime('%Y%m%d_%H%M')

router = {
    'device_type': 'cisco_ios',
    'host': '192.168.1.1',
    'username': 'admin',
    'password': 'cisco123',
}

comandos = ['show running-config', 'show ip route', 'show ip interface brief']

with ConnectHandler(**router) as conn:
    conn.enable()
    for cmd in comandos:
        output = conn.send_command(cmd)
        nombre_archivo = f"backup_{router['host']}_{cmd.replace(' ','_')}_{fecha}.txt"
        with open(nombre_archivo, 'w') as f:
            f.write(output)
        print(f"Guardado: {nombre_archivo}")
✅ Consejo profesional: Ejecuta tus scripts de Netmiko contra un laboratorio en GNS3 o Packet Tracer antes de correrlos en producción. Un error en el script puede dejar dispositivos mal configurados.

Conclusión

Netmiko democratiza la automatización de redes. Lo que antes requería conocimientos profundos de SNMP o herramientas caras como SolarWinds, hoy se puede hacer con 20 líneas de Python. Para un estudiante de redes, aprender Python + Netmiko es una ventaja competitiva enorme en el mercado laboral actual.

"Un ingeniero de redes que sabe Python no gestiona 50 dispositivos — gestiona 5000."