Python para Automação de Redes e Administração de Servidores

A administração de redes e servidores envolve tarefas repetitivas e críticas, como configuração de equipamentos, monitoramento de serviços, backup, deploy de aplicações e gerenciamento de usuários. Python se tornou a linguagem preferida para automação em TI, graças à sua simplicidade, riqueza de bibliotecas e integração com sistemas de infraestrutura.

Neste post, vamos explorar como usar Python para automação de redes e servidores, com exemplos práticos, bibliotecas recomendadas e estratégias para aumentar produtividade, segurança e confiabilidade.


1. Por que usar Python para automação de infraestrutura

  • Simplicidade e legibilidade: scripts claros e fáceis de manter.

  • Bibliotecas ricas: suporte a protocolos de redeSSHSNMPREST APIs e serviços em nuvem.

  • Integração com sistemas existentes: LinuxWindowsroteadoresswitchesfirewalls.

  • Escalabilidade: scripts pequenos podem evoluir para pipelines completos de automação.

  • Comunidade ativa: vasta documentação e exemplos para casos de uso de TI.


2. Automatizando tarefas de servidores

2.1 Execução remota via SSH

Python permite gerenciar servidores remotamente usando SSH.

Biblioteca paramiko:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.1.10", username="admin", password="senha")

stdin, stdout, stderr = ssh.exec_command("uptime")
print(stdout.read().decode())

ssh.close()

Aplicações práticas:

  • Monitorar uptime de servidores

  • Executar scripts de manutenção

  • Deploy de aplicações

Boa prática: utilizar chaves SSH ao invés de senhas para segurança.


2.2 Automatizando comandos do sistema

Biblioteca subprocess:

import subprocess

# Reiniciar serviço nginx
subprocess.run(["systemctl", "restart", "nginx"])

# Listar processos ativos
result = subprocess.run(["ps", "aux"], capture_output=True, text=True)
print(result.stdout)

Vantagens:

  • Executa comandos nativos do SO

  • Permite capturar saídas e erros

  • Ideal para scripts híbridos Python + shell


2.3 Gerenciamento de usuários e permissões

Python pode interagir com usuarios do sistema e permissões de arquivos.

import os
import pwd

# Listar usuários do sistema
for user in pwd.getpwall():
    print(user.pw_name)

# Criar diretório e definir permissões
os.makedirs("/tmp/teste", exist_ok=True)
os.chmod("/tmp/teste", 0o755)

3. Automação de redes

3.1 Monitoramento de dispositivos

Biblioteca netmiko: simplifica SSH para dispositivos de rede (CiscoJuniperHPArista).

from netmiko import ConnectHandler

device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.1",
    "username": "admin",
    "password": "senha"
}

connection = ConnectHandler(**device)
output = connection.send_command("show ip interface brief")
print(output)
connection.disconnect()

Aplicações práticas:

  • Verificar status de interfaces

  • Coletar informações de roteamento

  • Atualizar configurações em massa


3.2 Automação com SNMP

Biblioteca pysnmp: permite consultar dispositivos via SNMP.

from pysnmp.hlapi import *

iterator = getCmd(
    SnmpEngine(),
    CommunityData('public', mpModel=0),
    UdpTransportTarget(('192.168.1.1', 161)),
    ContextData(),
    ObjectType(ObjectIdentity('1.3.6.1.2.1.1.5.0'))  # sysName
)

errorIndication, errorStatus, errorIndex, varBinds = next(iterator)
if errorIndication:
    print(errorIndication)
else:
    for varBind in varBinds:
        print(varBind)

Aplicações práticas:

  • Monitoramento de tráfego, interfaces e status de dispositivos

  • Integração com dashboards de rede

  • Alertas automáticos em caso de falha


3.3 Trabalhando com APIs de dispositivos

Muitos dispositivos modernos expõem APIs REST:

import requests

url = "https://switch.local/api/v1/interfaces"
headers = {"Authorization": "Bearer SEU_TOKEN"}

response = requests.get(url, headers=headers)
interfaces = response.json()
for intf in interfaces:
    print(intf["name"], intf["status"])

Vantagens:

  • Configuração programática sem SSH

  • Permite integração com sistemas de gerenciamento centralizados

  • Ideal para automação de larga escala


4. Automatizando tarefas comuns de TI

4.1 Backup automatizado

import shutil
import datetime

source = "/var/www/html"
destination = f"/backup/html_{datetime.date.today()}.tar.gz"

shutil.make_archive(destination.replace(".tar.gz", ""), 'gztar', source)
print("Backup concluído!")

4.2 Deploy de aplicações

import subprocess

# Atualiza código do repositório Git
subprocess.run(["git", "pull", "origin", "main"])

# Reinicia serviço
subprocess.run(["systemctl", "restart", "meu_app"])

4.3 Monitoramento de logs

import time

log_file = "/var/log/nginx/access.log"

with open(log_file) as f:
    f.seek(0, 2)  # Vai para o fim do arquivo
    while True:
        line = f.readline()
        if not line:
            time.sleep(1)
            continue
        print("Nova linha:", line.strip())

5. Bibliotecas essenciais para automação

BibliotecaUso
paramikoSSH e execução remota
netmikoAutomação de dispositivos de rede
pysnmpConsultas SNMP
requestsInteração com APIs REST
subprocessExecução de comandos nativos do sistema
psutilMonitoramento de CPU, memória, processos
fabricExecução de tarefas em múltiplos servidores
ansibleIntegração com automação de configuração

6. Boas práticas para scripts de automação

  1. Segurança primeiro: evite senhas em texto plano, use chaves SSH ou variáveis de ambiente.

  2. Logging detalhado: registre ações e resultados, especialmente em produção.

  3. Validação de erros: trate falhas de conexão, permissões e tempo limite.

  4. Idempotência: scripts devem poder ser executados várias vezes sem efeitos colaterais indesejados.

  5. Modularidade: divida tarefas em funções e classes reutilizáveis.

  6. Versionamento: mantenha scripts sob controle de versão (Git) para auditoria e rollback.


7. Exemplo de projeto completo de automação

Objetivo: monitorar servidores, coletar métricas, reiniciar serviços críticos e enviar alertas.

Estrutura sugerida:

automation/
├── servers.yaml          # Configuração de servidores
├── monitor.py            # Script de monitoramento
├── deploy.py             # Deploy de aplicações
├── backup.py             # Backup automatizado
├── logs/                 # Armazenamento de logs
└── utils.py              # Funções auxiliares (SSH, API, etc.)

Fluxo completo:

  1. Ler configuração de servidores (servers.yaml)

  2. Conectar via SSH ou API

  3. Coletar métricas de CPU, memória e serviços

  4. Executar ações corretivas (reiniciar serviços, liberar espaço)

  5. Gerar logs e alertas por e-mail ou Slack


8. Conclusão

Python é uma ferramenta indispensável para automação de redes e administração de servidores, permitindo:

  • Executar tarefas repetitivas de forma confiável

  • Monitorar e gerenciar múltiplos servidores e dispositivos

  • Integrar diferentes tecnologias e APIs

  • Reduzir erros humanos e aumentar produtividade

Ao combinar bibliotecas poderosas, boas práticas de segurança e organização, é possível criar pipelines de automação robustos e escaláveis, transformando a administração de TI em processos programáticos e eficientes.

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

Estrutura Básica de um Programa C# com exemplos