Найти в Дзене
Николай Калюжный

Автоматизация настройки общих маршрутизаторов и коммутаторов с помощью Python, Paramiko и XML

В современных быстро меняющихся сетевых средах автоматизация играет решающую роль в эффективном управлении сетевыми устройствами. В этой статье мы рассмотрим, как автоматизировать настройку маршрутизатора с помощью Python и библиотеки Paramiko, что позволит вам оптимизировать повторяющиеся задачи и обеспечить согласованность сетевой инфраструктуры. Знакомство: Автоматизация рутинных задач, таких как настройка маршрутизатора, может значительно повысить производительность и снизить вероятность человеческих ошибок. Python, универсальный язык программирования, в сочетании с Paramiko, мощной библиотекой SSH, обеспечивает надежное решение для автоматизации управления сетевыми устройствами. Обзор скрипта: Предоставленный скрипт Python демонстрирует, как автоматизировать настройку маршрутизатора с помощью обмена данными SSH и шаблонов конфигурации на основе XML. Давайте разберем его ключевые составляющие: Заключение: Автоматизация настройки маршрутизатора с помощью Python и Paramiko позволяет

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

Знакомство: Автоматизация рутинных задач, таких как настройка маршрутизатора, может значительно повысить производительность и снизить вероятность человеческих ошибок. Python, универсальный язык программирования, в сочетании с Paramiko, мощной библиотекой SSH, обеспечивает надежное решение для автоматизации управления сетевыми устройствами.

Обзор скрипта: Предоставленный скрипт Python демонстрирует, как автоматизировать настройку маршрутизатора с помощью обмена данными SSH и шаблонов конфигурации на основе XML. Давайте разберем его ключевые составляющие:

  1. Импорт библиотек:Скрипт импортирует основные библиотеки, такие как csv, paramiko и xml.etree.ElementTree для обработки CSV-файлов, обмена данными SSH и синтаксического анализа XML соответственно.
  2. Определения функций:apply_router_config(hostname, username, password, enable_password, config_commands) Эта функция устанавливает SSH-соединение с маршрутизатором, указанным в указанном имени хоста, и применяет команды конфигурации, переданные в качестве аргументов. Он использует Paramiko для связи по SSH и выполняет каждую команду последовательно.
    main() Функция main считывает учетные данные маршрутизатора из файла CSV (router_credentials.csv) и команды конфигурации из файла XML (router_configuration_template.xml). Он выполняет итерацию по каждой записи маршрутизатора в файле CSV, применяет команды конфигурации и выводит соответствующие сообщения об успехе или ошибке.
  3. Употребление:Чтобы использовать скрипт, просто подготовьте CSV-файл (router_credentials.csv), содержащий учетные данные маршрутизатора (имя хоста, имя пользователя, пароль, пароль включения) и XML-файл (router_configuration_template.xml), содержащий шаблон конфигурации с командами, которые необходимо применить.
  4. Пример рабочего процесса:Предположим, что у вас есть сеть, состоящая из нескольких маршрутизаторов, которые должны быть настроены с определенными параметрами. Заполнив CSV-файл учетными данными маршрутизатора, а XML-файл — шаблонами конфигурации, можно выполнить скрипт для автоматизации процесса настройки для всех маршрутизаторов в сети.

Заключение: Автоматизация настройки маршрутизатора с помощью Python и Paramiko позволяет сетевым администраторам эффективно управлять сетевыми устройствами, сокращать количество ручных ошибок и обеспечивать единообразие во всей сетевой инфраструктуре. Используя автоматизацию, вы можете оптимизировать повторяющиеся задачи и сосредоточиться на стратегических инициативах для стимулирования роста бизнеса и инноваций.

Вот скрипт на Python:

import csv # Import the CSV module for reading CSV files

import paramiko # Import the Paramiko library for SSH communication

import xml.etree.ElementTree as ET # Import the ElementTree module for parsing XML files

import time # Import the time module for time-related functions

def apply_router_config(hostname, username, password, enable_password, config_commands):

try:

# Create an SSH client object

ssh_client = paramiko.SSHClient()

# Set the policy for automatically adding host keys

ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# Connect to the router using SSH

ssh_client.connect(hostname, username=username, password=password)

# Create a shell session for sending commands

shell = ssh_client.invoke_shell()

# Send the 'enable' command to enter privileged mode

shell.send("enable\n")

time.sleep(1)

# Send the enable password

shell.send(enable_password + "\n")

# Send configuration commands one by one

for cmd in config_commands:

shell.send(cmd.strip() + "\n") # Strip leading/trailing spaces and send the command

time.sleep(1) # Wait for a moment after sending each command

# Save the configuration

shell.send("end\n")

time.sleep(1)

shell.send("write memory\n")

time.sleep(1)

# Close the SSH connection

ssh_client.close()

# Print success message

print(f"Configuration applied successfully for {hostname}")

except Exception as e:

# Print error message if configuration application fails

print(f"Error applying configuration for {hostname}: {e}")

def main():

# Read router information from the CSV file

with open('router_credentials.csv', 'r') as csvfile:

csv_reader = csv.reader(csvfile) # Create a CSV reader object

next(csv_reader) # Skip the header row

for row in csv_reader: # Iterate over each row in the CSV file

hostname, username, password, enable_password = row # Extract router credentials from the row

# Read configuration commands from the XML file

tree = ET.parse('router_configuration_template.xml') # Parse the XML file

root = tree.getroot() # Get the root element of the XML tree

config_commands = [cmd.text for cmd in root.findall('config/command')] # Extract configuration commands

# Apply the configuration to the router

apply_router_config(hostname, username, password, enable_password, config_commands)

if __name__ == "__main__":

main() # Call the main function if the script is executed directly

Вот файл CSV: Имя_файла – router_credentials.csv

hostname,username,password,enable_password

172.16.0.200,cisco,cisco,cisco

172.16.0.201,cisco,cisco,cisco@123

Вот XML-файл: Filename – router_configuration_template.xml

<router_config>

<config>

<command>conf t</command>

<command>ntp server 172.16.0.1</command>

<command>clock timezone IST 5 30</command>

<command>logging buffered 10000000</command>

<command>access-list 1 permit 172.16.1.0 0.0.0.255</command>

<command>access-list 1 deny any</command>

<command>snmp-server community public RO</command>

<command>ssh timeout 120</command>

<command>no telnet-server</command>

<command>int loop 0</command>

<command>ip add 1.1.1.1 255.255.255.0</command>

</config>

</router_config>

Если у вас есть какие-либо мысли или вопросы по этой теме, пожалуйста, не стесняйтесь оставить комментарий или отправить мне сообщение. Я хотел бы продолжить дискуссию и услышать вашу точку зрения.

А также вы всегда можете поддержать меня зайдя на сайт и подписаться https://dzen.ru/kalyuzhnyy.ru и найти больше статей на моих ресурсах https://kalyuzhnyy.ru и https://dev.kalyuzhnyy.ru  или на моем канале telegramm https://t.me/nbkalyuzhnyy на котором в будущем будут выкладываться самые актуальные новости и инструкции по навыкам и обучению. Подпишись!