Communitygithub.com

netmiko-ssh-automation

Patrones seguros de Python Netmiko para recolección de solo lectura, SSH por lotes acotado, análisis con TextFSM, cambios de configuración protegidos, tiempos de espera y manejo de errores en automatización de redes. Úselo al automatizar el acceso a dispositivos de red con Python Netmiko, ya sea para recopilar estado o aplicar cambios de configuración controlados.

¿Qué es netmiko-ssh-automation?

Este skill proporciona patrones probados y seguros para automatizar dispositivos de red usando la biblioteca Netmiko en Python. Está diseñado para desarrolladores e ingenieros de redes que necesitan escribir scripts de automatización confiables, ya sea para recopilar información de solo lectura (comandos `show`) o para aplicar cambios de configuración de forma controlada. El skill enfatiza la seguridad por defecto: siempre comienza con operaciones de solo lectura, exige una bandera explícita para cambios de configuración, y recomienda el uso de variables de entorno o `getpass` para credenciales, evitando su codificación en el código fuente. Además, incluye ejemplos detallados de conexión única, recolección por lotes con `ThreadPoolExecutor` (limitando la concurrencia para no sobrecargar dispositivos antiguos), análisis estructurado con TextFSM, y un patrón de cambios protegidos con modo simulado (dry-run) antes de aplicar. También proporciona una lista de verificación para revisar scripts y advierte sobre anti-patrones comunes, como escaneos de rangos CIDR completos o registrar configuraciones completas sin sanitizar. Es compatible con cualquier plataforma que use Netmiko (Cisco IOS, NX-OS, Juniper, etc.) y se integra con herramientas de gestión de secretos y sistemas de control de cambios.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/netmiko-ssh-automation

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Automatización SSH con Netmiko

Use este skill al escribir o revisar automatización en Python que se conecte a dispositivos de red con Netmiko. Mantenga la ruta predeterminada como solo lectura; los cambios de configuración necesitan una ventana de cambios separada, revisión entre pares y un plan de reversión.

Cuándo Usarlo

  • Recopilar la salida de comandos show en routers, switches o firewalls.
  • Crear un pequeño script de auditoría para evidencia de interfaces, enrutamiento o configuración.
  • Agregar tiempos de espera y manejo de excepciones a scripts SSH de red.
  • Analizar la salida de comandos con TextFSM cuando exista una plantilla.
  • Revisar la automatización antes de que toque dispositivos en producción.

Valores Predeterminados de Seguridad

  • Comience con recolección de solo lectura usando send_command().
  • Mantenga el inventario pequeño y explícito; no barra rangos de direcciones completos.
  • Use variables de entorno, un vault o getpass; nunca codifique credenciales.
  • Establezca tiempos de espera de conexión y lectura.
  • Limite la concurrencia para no sobrecargar dispositivos antiguos.
  • Exija una bandera explícita del operador antes de send_config_set().
  • No llame a save_config() hasta que el cambio haya sido verificado y aprobado.

Patrón de Conexión de Solo Lectura

import os
from getpass import getpass
from netmiko import ConnectHandler
from netmiko.exceptions import (
    NetmikoAuthenticationException,
    NetmikoTimeoutException,
    ReadTimeout,
)

device = {
    "device_type": "cisco_ios",
    "host": "192.0.2.10",
    "username": os.environ.get("NETMIKO_USERNAME") or input("Usuario: "),
    "password": os.environ.get("NETMIKO_PASSWORD") or getpass("Contraseña: "),
    "secret": os.environ.get("NETMIKO_ENABLE_SECRET"),
    "conn_timeout": 10,
    "auth_timeout": 20,
    "banner_timeout": 15,
    "read_timeout_override": 30,
}

try:
    with ConnectHandler(**device) as conn:
        if device.get("secret") and not conn.check_enable_mode():
            conn.enable()
        output = conn.send_command("show ip interface brief", read_timeout=30)
        print(output)
except NetmikoAuthenticationException:
    print("Autenticación fallida")
except NetmikoTimeoutException:
    print("La conexión SSH expiró")
except ReadTimeout:
    print("La lectura del comando expiró")

Use direcciones de los rangos de documentación en los ejemplos. Mantenga el inventario real en un archivo local ignorado o en un sistema gestionado por secretos.

Recolección por Lotes

from concurrent.futures import ThreadPoolExecutor, as_completed
from typing import Any

def collect_show(device: dict[str, Any], command: str) -> dict[str, Any]:
    host = device["host"]
    try:
        with ConnectHandler(**device) as conn:
            output = conn.send_command(command, read_timeout=45)
        return {"host": host, "ok": True, "output": output}
    except (NetmikoAuthenticationException, NetmikoTimeoutException, ReadTimeout) as exc:
        return {"host": host, "ok": False, "error": type(exc).__name__}

results = []
with ThreadPoolExecutor(max_workers=8) as pool:
    futures = [pool.submit(collect_show, device, "show version") for device in devices]
    for future in as_completed(futures):
        results.append(future.result())

Mantenga max_workers bajo a menos que se sepa que el parque de dispositivos y los sistemas AAA pueden manejar un volumen de conexiones mayor.

Análisis Estructurado

Netmiko puede pedirle a TextFSM, TTP o Genie que analice la salida de comandos compatibles. Trate la salida del analizador como una optimización, no como la única ruta de evidencia.

with ConnectHandler(**device) as conn:
    parsed = conn.send_command(
        "show ip interface brief",
        use_textfsm=True,
        raise_parsing_error=False,
        read_timeout=30,
    )

if isinstance(parsed, str):
    print("No se encontró una plantilla de análisis; guarde la salida sin procesar para revisión")
else:
    for row in parsed:
        print(row)

Si el análisis impulsa una decisión crítica, conserve la salida sin procesar del comando junto con el resultado analizado para que un operador pueda inspeccionar las discrepancias.

Patrón de Cambios Protegidos

import os

commands = [
    "interface GigabitEthernet0/1",
    "description CHANGE-1234 UPLINK-TO-CORE",
]

apply_changes = os.environ.get("APPLY_NETWORK_CHANGES") == "1"

if not apply_changes:
    print("Solo simulación. Comandos candidatos:")
    print("\n".join(commands))
else:
    with ConnectHandler(**device) as conn:
        conn.enable()
        before = conn.send_command("show running-config interface GigabitEthernet0/1")
        output = conn.send_config_set(commands)
        after = conn.send_command("show running-config interface GigabitEthernet0/1")
        print(before)
        print(output)
        print(after)
        print("Verifique el comportamiento antes de guardar la configuración de inicio.")

Guardar la configuración es un paso de aprobación separado. En producción, incluya un fragmento de reversión y capture la evidencia de antes/después en el registro de cambios.

Lista de Verificación de Revisión

  • ¿El script identifica una fuente de inventario explícita?
  • ¿Están las credenciales ausentes del código fuente, registros y mensajes de excepción?
  • ¿Están establecidos conn_timeout, auth_timeout y read_timeout del comando?
  • ¿Se informan las fallas por dispositivo sin detener todo el lote?
  • ¿Evita el script escaneos amplios y concurrencia ilimitada?
  • ¿Están los cambios de configuración detrás de una bandera de simulación o explícita del operador?
  • ¿Está save_config() separado del envío inicial y vinculado a la verificación?

Anti-Patrones

  • Codificar contraseñas, secretos de enable o claves privadas en el código fuente.
  • Enviar comandos de configuración como la ruta de código predeterminada.
  • Ejecutar automatización contra un rango CIDR en lugar de un inventario revisado.
  • Registrar configuraciones completas en ejecución en sistemas compartidos sin sanitización.
  • Tratar el éxito del analizador como prueba de que el estado del dispositivo es correcto.

Véase También

  • Skill: cisco-ios-patterns
  • Skill: network-config-validation
  • Skill: network-interface-health

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Skills relacionados