Network SSH Automation – Extracción masiva de información de equipos de red o configuración masiva de los mismos.
Este proyecto implementa una herramienta completa para automatizar conexiones SSH a equipos de red, con soporte para:
-
Conexión directa o mediante servidor jump host Linux.
-
Ejecución de comandos generales y comandos específicos por host.
-
Lectura de listas de destinos y comandos desde CSV o Excel (.xlsx / .xls).
-
GUI con FreeSimpleGUI, incluyendo:
- Logs en tiempo real.
- Hilo separado para ejecución (no bloquea la ventana).
- Botón Parar con detención controlada.
El sistema realiza conexiones SSH con paramiko, abre un canal interactivo (invoke_shell()), ejecuta comandos y guarda las salidas en archivos separados.
/network_ssh_tool/
│
├── app_red.py # GUI principal
├── ejecutar_ssh_directo.py # SSH directo
├── ejecutar_ssh_linux.py # SSH vía jump host Linux
├── carga_archivos.py # Carga CSV y Excel → listas y diccionarios
├── leer_todo.py # Helper lectura de buffer
├── leer_hasta_prompt.py # Helper lectura hasta prompt
└── README.md # Este archivo
Cada módulo tiene una aplicación clara para mantener el código ordenado, reutilizable y fácil de extender.
La GUI está construida en FreeSimpleGUI. Permite seleccionar:
- Conexión SSH directa o Jump Host.
- Archivo de destinos.
- Archivo de comandos generales.
- Archivo de comandos por host (opcional).
- Carpeta de salida.
- Parámetros del Jump Host y del equipo Cisco.
- Usa hilos (threading) para que la GUI no se congele.
- Log en tiempo real usando
window.write_event_value(). - Botón Parar que activa
stop_flagy detiene el backend de forma controlada.
Realiza conexión SSH directa a cada equipo:
- Abre conexión con
SSHClient(). - Abre canal con
invoke_shell(). - Entra a modo enable.
- Ejecuta
terminal length 0. - Ejecuta comandos generales o por host.
- Guarda todo en
salida_<host>.txt. - Detiene si
should_stop()devuelve True.
Incluye manejo robusto de errores (timeout, password incorrecto, etc.).
Flujo completo:
-
Conectar a Linux via SSH.
-
Abrir shell interactivo.
-
Para cada host de red:
- Lanzar comando:
ssh_cmd user@ip - Detectar
yes/no,password:,Permission denied, timeouts. - Entrar a enable.
- Ejecutar comandos.
- Lanzar comando:
-
Guardar en
salida_<host>.txt. -
Soporte completo para botón Parar.
Detecta automáticamente si es:
- CSV con
,o; - Excel con cualquier hoja
Siempre toma la primera columna.
- Igual estructura que destinos.
- Cada fila → un comando.
Convierte archivos así:
| host | comando |
|---|---|
| 10.1.1.1 | show run |
| 10.1.1.1 | show ip int brief |
| 10.1.1.2 | show version |
A un diccionario:
{
"10.1.1.1": ["show run", "show ip int brief"],
"10.1.1.2": ["show version"],
}- Lee todo lo que haya en el buffer.
- Para cuando no llegan más datos.
- Lee hasta que aparezca un prompt.
- Usa regex:
.*[>#]\s*$. - Quita el eco del comando.
- Instalar dependencias:
pip install paramiko pandas FreeSimpleGUI- Ejecutar:
python app_red.py-
Desde la GUI:
- Seleccionar SSH directo o Jump host.
- Cargar archivos CSV/Excel.
- Elegir carpeta de salida.
- Presionar Ejecutar.
- Ver el log en tiempo real.
- Presionar Parar si quieres detener la ejecución.
-
El proyecto está estructurado de manera modular para facilitar mantenimiento.
-
Se puede extender fácilmente para soportar:
- Nuevos tipos de equipos.
- Nuevos prompts.
- Integración con bases de datos.
- Guardado en formatos adicionales.
En un futuro, se considera implementar un Agente usando LLMS que automatice de mejor forma este proyecto.