Communitygithub.com

netmiko-ssh-automation

安全なPython Netmikoパターン:読み取り専用収集、バウンドバッチSSH、TextFSMパース、ガード付き設定変更、タイムアウト、ネットワーク自動化エラーハンドリング。Netmikoを使用したネットワークデバイスアクセスの自動化(状態収集からガード付き設定変更まで)に使用します。

netmiko-ssh-automation とは?

このスキルは、ネットワーク機器へのSSH接続を自動化するPythonライブラリ「Netmiko」を使用したコードの作成・レビュー時に適用されます。主な特徴は、安全な読み取り専用パターン(send_command())のデフォルト化、バウンドバッチ収集による同時接続数の制限、TextFSMを用いた構造化パーシング、そして明示的なオペレータフラグに基づくガード付き設定変更(send_config_set())です。クローラ型の大規模スキャンを防ぎ、タイムアウト設定や例外処理を必須とし、認証情報のハードコーディングを禁止します。設定変更前後の差分取得、ロールバック計画、save_config()の分離承認など、変更管理のベストプラクティスも組み込まれています。このスキルは、ネットワーク自動化の安全性と信頼性を高め、本番環境での事故を未然に防ぐために不可欠です。

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

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Netmiko SSH Automation(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("Username: "),
    "password": os.environ.get("NETMIKO_PASSWORD") or getpass("Password: "),
    "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.

関連スキル