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.
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}")
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."