Communitygithub.com

netmiko-ssh-automation

Sichere Python Netmiko-Muster für schreibgeschützte Sammlungen, begrenztes Batch-SSH, TextFSM-Parsing, bewachte Konfigurationsänderungen, Timeouts und Fehlerbehandlung in der Netzwerkautomatisierung. Verwenden Sie dies, wenn Sie den Netzwerkgerätezugriff mit Python Netmiko automatisieren, sei es zum Sammeln von Zustandsdaten oder zum Durchführen bewachter Konfigurationsänderungen.

Was ist netmiko-ssh-automation?

Diese Fähigkeit bietet bewährte Methoden für die Verwendung der Netmiko-Bibliothek zur SSH-Automatisierung von Netzwerkgeräten. Sie legt den Schwerpunkt auf Sicherheit, indem sie standardmäßig schreibgeschützte `send_command()`-Aufrufe erzwingt und explizite Sicherheitsvorkehrungen wie Umgebungsvariablen für Anmeldeinformationen, Timeouts und eine niedrige Parallelität vorschreibt. Die Fähigkeit unterstützt die strukturierte Ausgabeanalyse mit TextFSM, die Batch-Sammlung mit `ThreadPoolExecutor` und ein bewachtes Konfigurationsänderungsmuster, das Dry-Runs und eine separate Überprüfung vor dem Speichern erfordert. Sie enthält auch eine Checkliste zur Überprüfung und eine Liste von Anti-Patterns, um häufige Fehler wie hartcodierte Passwörter oder breite Scans zu vermeiden. Diese Fähigkeit ist plattformunabhängig und für jedes Python-Skript geeignet, das Netmiko für den Zugriff auf Router, Switches, Firewalls oder andere SSH-fähige Netzwerkgeräte verwendet.

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

In Ihrer bevorzugten KI fragen

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

Dokumentation

Netmiko SSH Automatisierung

Verwenden Sie diese Fähigkeit, wenn Sie Python-Automatisierung schreiben oder überprüfen, die eine Verbindung zu Netzwerkgeräten mit Netmiko herstellt. Behalten Sie den Standardpfad schreibgeschützt bei; 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 existiert.
  • Ü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; kodieren Sie niemals Anmeldeinformationen fest.
  • Legen Sie Verbindungs- und Lesetimeouts fest.
  • Begrenzen Sie die Parallelität, damit ä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 abgelaufen")
except ReadTimeout:
    print("Befehlslesezeit abgelaufen")

Verwenden Sie Platzhalteradressen aus Dokumentationsbereichen in Beispielen. Halten Sie das eigentliche Inventar in einer ignorierten lokalen Datei oder einem geheimnisverwalteten 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, der Gerätebestand und die AAA-Systeme sind bekannt dafür, höhere Verbindungsvolumen 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 Beweisweg.

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; speichern Sie die Rohausgabe zur Überprüfung")
else:
    for row in parsed:
        print(row)

Wenn das Parsen eine blockierende Entscheidung steuert, bewahren Sie die Rohbefehlsausgabe 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. Kandidatenbefehle:")
    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("Überprüfen Sie das Verhalten, bevor Sie die Startkonfiguration speichern.")

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

Überprüfungs-Checkliste

  • Identifiziert das Skript eine explizite Inventarquelle?
  • Sind Anmeldeinformationen aus Quellcode, Protokollen und Ausnahmenachrichten entfernt?
  • Sind conn_timeout, auth_timeout und Befehls-read_timeout 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 explizitem Operator-Flag geschützt?
  • Ist save_config() separat vom ersten Push und an die Verifikation gebunden?

Anti-Patterns

  • Hartcodieren von Passwörtern, Enable-Secrets oder privaten Schlüsseln im Quellcode.
  • Senden von Konfigurationsbefehlen als Standardcodepfad.
  • Ausführen von Automatisierung gegen einen CIDR-Bereich anstelle eines überprüften Inventars.
  • Protokollieren vollständiger Running-Configs in gemeinsam genutzten Systemen ohne Bereinigung.
  • Behandlung des Parser-Erfolgs als Beweis dafür, dass der Gerätezustand korrekt ist.

Siehe auch

  • Fähigkeit: cisco-ios-patterns
  • Fähigkeit: network-config-validation
  • Fähigkeit: 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.

Verwandte Skills