Найти в Дзене

Python для сетевого инженера, часть первая (Paramiko и автоматическая сбор конфигурации с коммутаторов)

Для автоматического сбора конфигураций с коммутаторов различных производителей (Cisco, Eltex, MikroTik, Ubiquiti) и сохранения их в файлы можно использовать следующие подходы и примеры кода. Основные методы включают использование SSH (через библиотеки like Paramiko или Netmiko) и SNMP (в случаях, когда это поддерживается).
Общие подходы: Прежде чем приводить примеры, надо обсудить, что такое Paramiko и как его запустить у себя. Paramiko — это библиотека Python для реализации клиентских и серверных компонентов протокола SSHv2 . Она позволяет безопасно подключаться к удаленным серверам, выполнять команды, передавать файлы через SFTP и управлять сетевыми устройствами (например, коммутаторами Cisco, Eltex, MikroTik и Ubiquiti). Paramiko широко используется для автоматизации задач, связанных с удаленным управлением и мониторингом. Установка Paramiko осуществляется с помощью менеджера пакетов pip. Однако библиотека зависит от нескольких компонентов, поэтому в некоторых случаях требуются доп

Для автоматического сбора конфигураций с коммутаторов различных производителей (Cisco, Eltex, MikroTik, Ubiquiti) и сохранения их в файлы можно использовать следующие подходы и примеры кода. Основные методы включают использование SSH (через библиотеки like Paramiko или Netmiko) и SNMP (в случаях, когда это поддерживается).

Общие подходы:

  1. SSH/CLI доступ: Для большинства устройств сбор конфигурации выполняется через SSH подключение и выполнение команд CLI.
  2. SNMP: Некоторые устройства (особенно Cisco) позволяют копировать конфигурации через SNMP , но это менее распространено и может быть сложнее в настройке.
  3. API: Некоторые современные устройства (например, Ubiquiti Unifi) могут иметь API, но в данном случаеfocus на CLI.

Прежде чем приводить примеры, надо обсудить, что такое Paramiko и как его запустить у себя.

Paramiko — это библиотека Python для реализации клиентских и серверных компонентов протокола SSHv2 . Она позволяет безопасно подключаться к удаленным серверам, выполнять команды, передавать файлы через SFTP и управлять сетевыми устройствами (например, коммутаторами Cisco, Eltex, MikroTik и Ubiquiti). Paramiko широко используется для автоматизации задач, связанных с удаленным управлением и мониторингом.

Как установить Paramiko

Установка Paramiko осуществляется с помощью менеджера пакетов pip. Однако библиотека зависит от нескольких компонентов, поэтому в некоторых случаях требуются дополнительные шаги.

1. Установка через pip (рекомендуемый способ) с помощью команды:
pip install paramiko

Это автоматически установит все зависимости, включая cryptography

2. Установка на Windows

  • Убедитесь, что установлен Python (рекомендуется версия 3.6+).
  • Установите Microsoft Visual C++ Compiler (если возникают ошибки при установке зависимостей) .
  • Используйте pip:
    pip install paramiko

3. Установка на Linux (Ubuntu/Debian)
Обновите систему и установите зависимости:
sudo apt update
sudo apt install python3-pip libffi-dev libssl-dev python3-dev


Установите Paramiko:
pip3 install paramiko

4. Установка на CentOS/RHEL

Установите зависимости:
sudo yum install epel-release
sudo yum install python3-pip libffi-devel openssl-devel python3-devel


Выполните:
pip3 install paramiko

Возможные проблемы при установке

  1. Ошибки с cryptography:
    На старых системах (например, Ubuntu 14.04) может потребоваться обновление pip или установка cryptography вручную:
    pip3 install --upgrade pip
    pip3 install cryptography
  2. Отсутствие компилятора C++ (для Windows):
    Установите Microsoft Visual C++ Build Tools .
  3. Зависимости для GSS-API/Kerberos:
    Если требуется поддержка Kerberos, установите Paramiko с опцией [gssapi]:
    pip install paramiko[gssapi]

Проверка установки

После установки убедитесь, что библиотека работает корректно:
import paramiko
print("Paramiko установлен успешно!")

Важные замечания

  • Безопасность: Не храните пароли в коде. Используйте переменные окружения или файлы конфигурации с ограниченным доступом.
  • Совместимость: Paramiko работает с Python 3.6+ .
  • Альтернативы: Для высокоуровневых задач (например, запуск команд на множестве устройств) можно использовать Fabric, основанный на Paramiko .

Если вы столкнулись с ошибками, проверьте версии зависимостей и наличие компилятора для вашей ОС.

Пример кода на Python с использованием Paramiko (для Cisco, Eltex, MikroTik, Ubiquiti):

import paramiko
import time
from datetime import datetime


# Список устройств: формат (IP, вендор, username, password)
devices = [
('192.168.1.1', 'cisco', 'admin', 'password'),
('192.168.1.2', 'eltex', 'admin', 'password'),
('192.168.1.3', 'mikrotik', 'admin', 'password'),
('192.168.1.4', 'ubiquiti', 'admin', 'password'),
]


# Команды для получения конфигурации для каждого вендора
commands = {
'cisco': 'show running-config',
'eltex': 'show running-config',
'mikrotik': '/export',
'ubiquiti': 'show configuration'
}


for device in devices:
ip, vendor, username, password = device
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
client.connect(ip, username=username, password=password, look_for_keys=False)

print(f"Подключение к {ip} ({vendor}) установлено.")

# Для MikroTik и Ubiquiti может потребоваться использовать shell интерактивно
if vendor in ['mikrotik', 'ubiquiti']:
shell = client.invoke_shell()
shell.send(commands[vendor] + '\n')

time.sleep(2) # Ожидание выполнения команды
output = shell.recv(65535).decode('utf-8')
else:
stdin, stdout, stderr = client.exec_command(commands[vendor])
output = stdout.read().decode('utf-8')


# Сохранение в файл с именем, включающим IP и дату
filename = f"config_{ip}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
with open(filename, 'w') as f:
f.write(output)
print(f"Конфигурация для {ip} сохранена в {filename}")


except Exception as e:
print(f"Ошибка подключения к {ip}: {str(e)}")

finally:
client.close()

Примечания:

  1. Для MikroTik: Команда /export возвращает конфигурацию в виде скрипта.
  2. Для Ubiquiti: Команда show configuration покажет текущую конфигурацию.
  3. Для Cisco и Eltex: Используется команда show running-config.

Альтернативные методы (из результатов поиска):

  • Использование SNMP для Cisco: Для Cisco можно использовать SNMP для копирования конфигурации с помощью инструмента snmp_tool . Пример:
    from snmp_tool import snmp_tool
    snmp = snmp_tool('172.17.0.32', 'private')
    snmp.copy('running', 'startup') # Сохранить running-config в startup-config
  • Использование PyEZ для Juniper: Хотя в вопросе не упомянут Juniper, но для него можно использовать библиотеку PyEZ.

Дополнительные улучшения:

  • Обработка ошибок: Добавьте более точную обработку ошибок для разных типов устройств.
  • Параллелизм: Используйте многопоточность для одновременного подключения к нескольким устройствам.
  • Безопасность: Храните учетные данные в защищенном виде (например, используя getpass или переменные окружения).
  • Логирование: Добавьте логирование для отслеживания процесса сбора конфигураций.

Этот код предоставляет базовый пример для сбора конфигураций с устройств разных вендоров. В зависимости от конкретных моделей и прошивок команды могут незначительно отличаться.