Communitygithub.com

netmiko-ssh-automation

使用安全的 Python Netmiko 模式进行只读采集、限流批量 SSH、TextFSM 解析、受控配置变更及网络自动化错误处理。在通过 Netmiko 自动化网络设备访问时使用,无论是采集状态还是推送受控的配置变更。

netmiko-ssh-automation 是什么?

Netmiko SSH 自动化技能专为使用 Python 和 Netmiko 库编写或审查网络设备自动化脚本的开发者设计。其核心原则是安全优先:默认路径为只读采集(使用 `send_command()` 获取 `show` 命令输出),配置变更必须通过明确的“更改窗口”、同行评审和回滚计划来管理。技能提供了完整的只读连接模式示例,包括如何安全地通过环境变量或 `getpass` 处理凭据、设置连接与读取超时,并捕获常见的 Netmiko 异常(如认证失败、超时)。对于批量采集,它使用 `ThreadPoolExecutor` 实现并发控制,建议将 `max_workers` 保持在较低水平以避免过载老旧设备。此外,该技能还支持通过 TextFSM、TTP 或 Genie 进行结构化解析,并提供了受控配置变更模式,该模式通过环境变量 `APPLY_NETWORK_CHANGES` 进行守卫,确保默认处于“仅检查”模式,并在推送前捕获变更前后的配置。该技能适用于任何支持 Netmiko 的平台,包括 Cisco IOS、NX-OS、Juniper JunOS 等。

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

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Netmiko SSH 自动化

在编写或审查使用 Netmiko 连接网络设备的 Python 自动化脚本时使用此技能。保持默认路径为只读;配置变更需要单独的变更窗口、同行评审和回滚计划。

使用场景

  • 在路由器、交换机或防火墙上收集 show 命令的输出。
  • 为接口、路由或配置证据编写小型审计脚本。
  • 为网络 SSH 脚本添加超时和异常处理。
  • 当存在模板时,使用 TextFSM 解析命令输出。
  • 在自动化脚本接触生产设备之前进行审查。

安全默认设置

  • 从只读的 send_command() 收集开始。
  • 保持库存清单小而明确;不要扫描整个地址范围。
  • 使用环境变量、密码库或 getpass;切勿硬编码凭证。
  • 设置连接和读取超时。
  • 限制并发度,以避免过载老旧设备。
  • 在 send_config_set() 之前需要明确的运算符标志。
  • 在变更得到验证和批准之前,不要调用 save_config()。

只读连接模式

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("用户名: "),
    "password": os.environ.get("NETMIKO_PASSWORD") or getpass("密码: "),
    "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("认证失败")
except NetmikoTimeoutException:
    print("SSH 连接超时")
except ReadTimeout:
    print("命令读取超时")

在示例中使用文档范围内的占位地址。将真实库存清单保存在被忽略的本地文件或秘密管理系统中。

批量采集

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

除非已知设备库存和 AAA 系统能够处理更高的连接量,否则请保持 max_workers 较低。

结构化解析

Netmiko 可以请求 TextFSM、TTP 或 Genie 解析支持的命令输出。将解析器输出视为一种优化,而不是唯一的证据路径。

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("没有匹配的解析器模板;保存原始输出以供审查")
else:
    for row in parsed:
        print(row)

如果解析结果驱动了决策,请将原始命令输出与解析结果一起保存,以便操作员检查不匹配项。

受控配置模式

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("仅检查模式。候选命令:")
    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("在保存启动配置前验证行为。")

保存配置是一个独立的审批步骤。在生产环境中,包含回滚代码片段,并在变更记录中捕获变更前后的证据。

审查清单

  • 脚本是否指明了明确的库存源?
  • 凭证是否未出现在源代码、日志和异常消息中?
  • 是否设置了 conn_timeout、auth_timeout 和命令级别 read_timeout?
  • 故障是否按设备报告,而不是停止整个批次?
  • 脚本是否避免了广泛扫描和无限制的并发?
  • 配置变更是否位于仅检查模式或明确的运算符标志之后?
  • save_config() 是否与初始推送分开,并与验证关联?

反模式

  • 在源代码中硬编码密码、启用密码或私钥。
  • 将发送配置命令作为默认代码路径。
  • 对 CIDR 范围运行自动化,而不是经过审查的库存清单。
  • 将完整的运行配置记录到未进行脱敏处理的共享系统。
  • 将解析成功视为设备状态正确的证据。

另请参阅

  • 技能: cisco-ios-patterns
  • 技能: network-config-validation
  • 技能: 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.

相关技能