Pular para o conteúdo
Skillpedia
APIs e servidores (backend)280 mil · #238

netmiko-ssh-automation

Faz seu agente automatizar o acesso a dispositivos de rede via SSH. Ele coleta informações e faz alterações seguras de configuração. É útil para gerenciar redes de forma confiável e segura.

O que ela faz

Esta ferramenta ajuda a automatizar tarefas em equipamentos de rede como roteadores e switches usando Python. Ela permite coletar informações de forma segura ou fazer alterações controladas nas configurações.

Quando usar

  • ✓Coletar informações de comandos como 'show' em vários dispositivos.
  • ✓Criar um script simples para verificar configurações de rede.
  • ✓Adicionar segurança e tratamento de erros em scripts de rede.

Exemplo do que pedir para a IA

“Colete o status da interface de rede de todos os roteadores.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/skills/netmiko-ssh-automation/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/skills/netmiko-ssh-automation/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O código se conecta aos dispositivos de rede usando um protocolo seguro (SSH), executa comandos e pode processar as respostas. Ele inclui medidas de segurança para evitar problemas.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill netmiko-ssh-automation

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/skills/netmiko-ssh-automation/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Automação SSH com Netmiko

Use esta habilidade ao escrever ou revisar automação Python que se conecta a dispositivos de rede com Netmiko. Mantenha o caminho padrão como somente leitura; alterações de configuração precisam de uma janela de alteração separada, revisão por pares e plano de reversão.

Quando Usar

  • Coletando saída de comando show em roteadores, switches ou firewalls.
  • Construindo um pequeno script de auditoria para evidências de interface, roteamento ou configuração.
  • Adicionando tempos limite e tratamento de exceções a scripts SSH de rede.
  • Analisando a saída de comando com TextFSM quando um template existe.
  • Revisando a automação antes que ela toque em dispositivos de produção.

Padrões de Segurança

  • Comece com coleta send_command() somente leitura.
  • Mantenha o inventário pequeno e explícito; não escaneie faixas inteiras de endereços.
  • Use variáveis de ambiente, um cofre ou getpass; nunca codifique credenciais.
  • Defina tempos limite de conexão e leitura.
  • Limite a concorrência para que dispositivos mais antigos não fiquem sobrecarregados.
  • Exija uma flag explícita do operador antes send_config_set().
  • Não chame save_config() até que a alteração tenha sido verificada e aprovada.

Padrão de Conexão Somente Leitura

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("Authentication failed")
except NetmikoTimeoutException:
    print("SSH connection timed out")
except ReadTimeout:
    print("Command read timed out")

Use endereços de placeholder de intervalos de documentação em exemplos. Mantenha o inventário real em um arquivo local ignorado ou em um sistema gerenciado por segredos.

Coleta em Lote

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

Mantenha max_workers baixo, a menos que o parque de dispositivos e os sistemas AAA sejam conhecidos por lidar com um volume maior de conexões.

Análise Estruturada

Netmiko pode pedir ao TextFSM, TTP ou Genie para analisar a saída de comandos suportados. Trate a saída do parser como uma otimização, não como o único caminho de evidência.

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 parser template matched; store raw output for review")
else:
    for row in parsed:
        print(row)

Se a análise impulsionar uma decisão de bloqueio, mantenha a saída bruta do comando ao lado do resultado analisado para que um operador possa inspecionar incompatibilidades.

Padrão de Configuração Protegida

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("Somente execução de teste. 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)

…
Perguntas frequentes

Como a ferramenta lida com senhas?

Ela usa métodos seguros como variáveis de ambiente ou caixas de diálogo para pedir senhas, nunca as salva diretamente no código.

Posso fazer alterações arriscadas nas configurações?

Sim, mas com muita cautela. Alterações de configuração exigem um passo extra de confirmação e revisão para garantir a segurança.

O que acontece se a conexão falhar?

A ferramenta é projetada para lidar com falhas de conexão ou de comando, informando o erro sem interromper todo o processo.

Detalhes

Descrição original do autor

Safe Python Netmiko patterns for read-only collection, bounded batch SSH, TextFSM parsing, guarded config changes, timeouts, and network automation error handling. Use when automating network device access with Python Netmiko, whether collecting state or pushing guarded config changes.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#238
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas