Skip to content

krist2357/APP_NETWORKING_2

Repository files navigation

Network SSH Automation – Extracción masiva de información de equipos de red o configuración masiva de los mismos.

image

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.


📁 Estructura del Proyecto

/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.


🖥 1. app_red.py (Interfaz gráfica / Punto de entrada)

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.

🔧 Características:

  • 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_flag y detiene el backend de forma controlada.

🔌 2. ejecutar_ssh_directo.py

Realiza conexión SSH directa a cada equipo:

  1. Abre conexión con SSHClient().
  2. Abre canal con invoke_shell().
  3. Entra a modo enable.
  4. Ejecuta terminal length 0.
  5. Ejecuta comandos generales o por host.
  6. Guarda todo en salida_<host>.txt.
  7. Detiene si should_stop() devuelve True.

Incluye manejo robusto de errores (timeout, password incorrecto, etc.).


🧭 3. ejecutar_ssh_linux.py (Jump Host)

Flujo completo:

  1. Conectar a Linux via SSH.

  2. Abrir shell interactivo.

  3. Para cada host de red:

    • Lanzar comando: ssh_cmd user@ip
    • Detectar yes/no, password:, Permission denied, timeouts.
    • Entrar a enable.
    • Ejecutar comandos.
  4. Guardar en salida_<host>.txt.

  5. Soporte completo para botón Parar.


📄 4. carga_archivos.py (CSV / Excel)

✔ Destinos (Conjunto de equipo a ser configurados)

Detecta automáticamente si es:

  • CSV con , o ;
  • Excel con cualquier hoja

Siempre toma la primera columna.

✔ Comandos generales

  • Igual estructura que destinos.
  • Cada fila → un comando.

✔ Comandos por host

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"],
}

🧩 5. Helpers: leer_todo y leer_hasta_prompt

leer_todo:

  • Lee todo lo que haya en el buffer.
  • Para cuando no llegan más datos.

leer_hasta_prompt:

  • Lee hasta que aparezca un prompt.
  • Usa regex: .*[>#]\s*$.
  • Quita el eco del comando.

▶️ 6. Cómo ejecutar

  1. Instalar dependencias:
pip install paramiko pandas FreeSimpleGUI
  1. Ejecutar:
python app_red.py
  1. 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.

📌 Notas finales

  • 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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages