Communitygithub.com

Netmiko-SSH-Automation

Sichere Python Netmiko-Muster für schreibgeschützte Sammlung, begrenzte Batch-SSH, TextFSM-Parsing, bewachte Konfigurationsänderungen, Timeouts und Netzwerkautomations-Fehlerbehandlung. Verwenden Sie dies, wenn Sie den Netzwerkgerätezugriff mit Python Netmiko automatisieren, egal ob Sie Zustände sammeln oder bewachte Konfigurationsänderungen durchführen.

Was ist Netmiko-SSH-Automation?

Diese Fähigkeit bietet bewährte Muster für die sichere Automatisierung von Netzwerkgeräten mit Python Netmiko. Sie betont einen standardmäßig schreibgeschützten Pfad, bei dem `send_command()`-Sammlungen der Standard sind, während Konfigurationsänderungen (`send_config_set()`) hinter einem expliziten Operator-Flag oder einer Trockenlauf-Prüfung erfordern. Sie behandelt kritische Sicherheitsvorkehrungen wie die Verwendung von Umgebungsvariablen für Anmeldeinformationen, Timeout-Konfiguration (Verbindungs-, Authentifizierungs- und Lese-Timeout), begrenzte Parallelität mit `ThreadPoolExecutor` und die getrennte Verarbeitung der Startkonfiguration. Die Fähigkeit umfasst strukturierte Parsing-Muster mit TextFSM, wobei darauf hingewiesen wird, dass geparste Ausgaben als Optimierung und nicht als einziger Nachweis behandelt werden sollten. Sie liefert eine vollständige Überprüfungsliste und warnt vor Anti-Patterns wie hartcodierten Passwörtern, unbegrenzten Scans und dem unbeaufsichtigten Speichern von Konfigurationen. Die Fähigkeit ist plattformunabhängig (Netmiko) und für Netzwerkingenieure und Entwickler gedacht, die Python-Skripte für Router, Switches und Firewalls in Produktionsumgebungen schreiben oder überprüfen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/netmiko-ssh-automation

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Netmiko-SSH-Automation?

Verwenden Sie diese Fähigkeit, wenn Sie Python-Automatisierung schreiben oder überprüfen, die mit Netmiko eine Verbindung zu Netzwerkgeräten herstellt. Halten Sie den Standardpfad schreibgeschützt; Konfigurationsänderungen benötigen ein separates Änderungsfenster, eine Peer-Review und einen Rollback-Plan.

Wann verwenden

  • Sammeln von show-Befehlsausgaben auf Routern, Switches oder Firewalls.
  • Erstellen eines kleinen Audit-Skripts für Schnittstellen-, Routing- oder Konfigurationsnachweise.
  • Hinzufügen von Timeouts und Ausnahmebehandlung zu Netzwerk-SSH-Skripten.
  • Parsen von Befehlsausgaben mit TextFSM, wenn eine Vorlage vorhanden ist.
  • Überprüfen der Automatisierung, bevor sie Produktionsgeräte berührt.

Sicherheitsstandards

  • Beginnen Sie mit schreibgeschützter send_command()-Sammlung.
  • Halten Sie das Inventar klein und explizit; scannen Sie keine gesamten Adressbereiche.
  • Verwenden Sie Umgebungsvariablen, einen Tresor oder getpass; hardcodieren Sie niemals Anmeldeinformationen.
  • Setzen Sie Verbindungs- und Lese-Timeouts.
  • Begrenzen Sie die Parallelität, sodass ältere Geräte nicht überlastet werden.
  • Erfordern Sie ein explizites Operator-Flag vor send_config_set().
  • Rufen Sie save_config() erst auf, wenn die Änderung verifiziert und genehmigt wurde.

Schreibgeschütztes Verbindungsmuster

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("Benutzername: "),
    "password": os.environ.get("NETMIKO_PASSWORD") or getpass("Passwort: "),
    "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("Authentifizierung fehlgeschlagen")
except NetmikoTimeoutException:
    print("SSH-Verbindung zeitüberschritten")
except ReadTimeout:
    print("Befehlslesezeit überschritten")

Verwenden Sie Platzhalteradressen aus Dokumentationsbereichen in Beispielen. Halten Sie das echte Inventar in einer ignorierten lokalen Datei oder einem Secrets-verwalteten System.

Batch-Sammlung

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())

Halten Sie max_workers niedrig, es sei denn, die Geräteumgebung und AAA-Systeme sind bekannt dafür, eine höhere Verbindungsanzahl zu verarbeiten.

Strukturiertes Parsen

Netmiko kann TextFSM, TTP oder Genie bitten, unterstützte Befehlsausgaben zu parsen. Behandeln Sie die Parser-Ausgabe als Optimierung, nicht als einzigen Beweispfad.

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("Keine Parser-Vorlage gefunden; rohe Ausgabe zur Überprüfung speichern")
else:
    for row in parsed:
        print(row)

Wenn das Parsen eine blockierende Entscheidung beeinflusst, bewahren Sie die rohe Befehlsausgabe zusammen mit dem geparsten Ergebnis auf, damit ein Operator Abweichungen überprüfen kann.

Bewachtes Konfigurationsmuster

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("Nur Trockenlauf. Kandidaten-Befehle:")
    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("Verhalten überprüfen, bevor die Startkonfiguration gespeichert wird.")

Das Speichern der Konfiguration ist ein separater Genehmigungsschritt. Fügen Sie in der Produktion einen Rollback-Ausschnitt hinzu und erfassen Sie Vorher-/Nachher-Nachweise im Änderungsdatensatz.

Überprüfungscheckliste

  • Identifiziert das Skript eine explizite Inventarquelle?
  • Sind Anmeldeinformationen in Quelle, Protokollen und Ausnahmemeldungen nicht enthalten?
  • Sind conn_timeout, auth_timeout und read_timeout für Befehle gesetzt?
  • Werden Fehler pro Gerät gemeldet, ohne die gesamte Batch zu stoppen?
  • Vermeidet das Skript breite Scans und unbegrenzte Parallelität?
  • Sind Konfigurationsänderungen hinter einem Trockenlauf oder expliziten Operator-Flag?
  • Ist save_config() vom initialen Push getrennt und mit der Verifizierung verknüpft?

Anti-Patterns

  • Hartcodieren von Passwörtern, Enable-Secrets oder privaten Schlüsseln im Quellcode.
  • Senden von Konfigurationsbefehlen als Standard-Code-Pfad.
  • Ausführen von Automatisierung gegen einen CIDR-Bereich anstatt einem überprüften Inventar.
  • Protokollieren vollständiger Running-Konfigurationen auf gemeinsam genutzten Systemen ohne Bereinigung.
  • Behandlung des Parser-Erfolgs als Beweis, dass der Gerätezustand korrekt ist.

Siehe auch

  • 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/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

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.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Verwandte Skills