Скрипт автоматического бэкапа конфигурации Mikrotik
Ожидает приглашения
Всем привет!
Недавно передо мной встала задача организовать автоматическое создание бэкапов на Mikrorik. Так как конфигурация меняется, но не всегда сохраняют эти изменения. И в случае выхода из строя маршрутизатора, необходимо быстро накатить работающую конфигурацию на другой маршрутизатор. Так как я недавно начал изучать Python решил, что буду использовать этот язык для написания скрипта.
Мысль была следующей: написать скрипт, который будет подключаться к mikrotik, посылать команду для сохранения текущей конфигурации и далее по ftp скачиваем с этого маршрутизатора файл конфигурации. В результате родился следующий скрипт:
import telnetlib
import time
import datetime
import logging
###делаем бэкап конфигурации микротика###
def mikrotik_make_backup():
host = "ip_adress_mikrotik" # ip адрес нашего mikrotik
user = "login" # логин для подключения к mikrotik
password = "pass" # пароль для подключения
dn = datetime.datetime.today() # получаем дату
cur_year = str(dn.year)
cur_month = str(dn.month)
cur_day = str(dn.day)
date_now = cur_day + cur_month + cur_year
cur_hour = str(dn.hour)
cur_minutes = str(dn.minute)
cur_time = cur_hour + cur_minutes
command_1 = '/system backup save name=mikrotik' + date_now + "-" + cur_time # команда для создания бэкапа на микротике
command_2 = 'quit'
tn = telnetlib.Telnet(host) # подключаемся к микротик по telnet
tn.read_until(b"Login: ")
tn.write(user.encode('UTF-8') + b"\n")
tn.read_until(b"Password: ")
tn.write(password.encode('UTF-8') + b"\n")
tn.read_until(b'>')
tn.write(command_1.encode('UTF-8') + b"\r\n")
logging.basicConfig(filename='log.txt', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.info("backup сделан")
time.sleep(5)
tn.read_until(b'>')
tn.write(command_2.encode('UTF-8') + b"\r\n")
time.sleep(5)
upload_ftp()
def upload_ftp():
import ftplib
import os
import os.path
ftp = ftplib.FTP('ip_adress_mikrotik') # подключаемся к микротик по FTP, вместо ip_adress_mikrotik вводим адрес нашего устройства
ftp.login('login', 'password') # вместо login и password вводим наши логин и пароли
listing = []
lst_for_delete = [] # лист для списка существуующих бэкапов
ftp.retrlines('LIST', listing.append)
for i in range(len(listing)):
words = listing[i].split(None, 8)
filename = words[-1].lstrip()
string = 'mikrotik'
count = filename.count(string)
if count == 1:
backup_name = filename
lst_for_delete.append(backup_name)
local_filename = os.path.join(r"d:\MikrotikBackUp", backup_name)
lf = open(local_filename, "wb")
ftp.retrbinary("RETR " + filename, lf.write, 8 * 1024)
logging.basicConfig(filename='log.txt', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.info(backup_name + " скопирован на сервер")
if len(lst_for_delete) > 15:
ftp.delete(lst_for_delete[-1]) # на микротике сохраняется только последние 15 бэкапов
logging.basicConfig(filename='log.txt', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.info("Файл удален: " + lst_for_delete[-1])
mikrotik_make_backup()
Этот скрипт я скинул на сервер по пути d:\Scripts. В этой же папке создал файл log.txt для записи в него событий.
Так же создал папку d:\MikrotikBackUp, туда будут бэкапиться конфигурации. С помощью планировщика заданий задаем необходимую частоту запуска скрипта.
Запускаем и смотрим результат.
PS: Скрипт легко переделывается для обхода нескольких микротиков. Так же можно переписать так, чтобы конфигурация копировалась и устанавливалась на резервный микротик.