Для автоматического сбора конфигураций с коммутаторов различных производителей (Cisco, Eltex, MikroTik, Ubiquiti) и сохранения их в файлы можно использовать следующие подходы и примеры кода. Основные методы включают использование SSH (через библиотеки like Paramiko или Netmiko) и SNMP (в случаях, когда это поддерживается).
Общие подходы:
- SSH/CLI доступ: Для большинства устройств сбор конфигурации выполняется через SSH подключение и выполнение команд CLI.
- SNMP: Некоторые устройства (особенно Cisco) позволяют копировать конфигурации через SNMP , но это менее распространено и может быть сложнее в настройке.
- 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
Возможные проблемы при установке
- Ошибки с cryptography:
На старых системах (например, Ubuntu 14.04) может потребоваться обновление pip или установка cryptography вручную:
pip3 install --upgrade pip
pip3 install cryptography - Отсутствие компилятора C++ (для Windows):
Установите Microsoft Visual C++ Build Tools . - Зависимости для 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()
Примечания:
- Для MikroTik: Команда /export возвращает конфигурацию в виде скрипта.
- Для Ubiquiti: Команда show configuration покажет текущую конфигурацию.
- Для 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 или переменные окружения).
- Логирование: Добавьте логирование для отслеживания процесса сбора конфигураций.
Этот код предоставляет базовый пример для сбора конфигураций с устройств разных вендоров. В зависимости от конкретных моделей и прошивок команды могут незначительно отличаться.