Автоматическое резервное копирование конфигурации MikroTik через SSH

Решение для автоматического создания резервных копий конфигурации MikroTik RouterOS через SSH. Скрипт подключается к маршрутизатору, выполняет экспорт конфигурации, сохраняет его в локальную папку и автоматически удаляет старые копии.

Резервное копирование конфигурации сетевого оборудования — одна из базовых задач эксплуатации сети. Даже если оборудование работает стабильно, всегда остаются риски: ошибочное изменение настроек, сбой устройства, неудачное обновление RouterOS, аппаратная неисправность или человеческий фактор.

Чтобы быстро восстановить настройки MikroTik после сбоя или ошибки, необходимо регулярно сохранять актуальную конфигурацию. Для этого можно использовать автоматический скрипт, который подключается к маршрутизатору по SSH и сохраняет экспорт конфигурации в файл.


Что делает решение

Скрипт выполняет следующие действия:

  • подключается к MikroTik по SSH;
  • выполняет команду получения имени устройства;
  • получает информацию о ресурсах маршрутизатора;
  • выполняет экспорт конфигурации RouterOS;
  • сохраняет результат в файл .rsc;
  • добавляет в файл служебный заголовок с датой, IP-адресом, identity и resource;
  • выставляет безопасные права доступа к файлу;
  • удаляет старые резервные копии старше заданного срока.

В результате на сервере автоматически появляется актуальный экспорт конфигурации MikroTik, который можно использовать для анализа или восстановления настроек.


Зачем это необходимо

Резервные копии конфигурации MikroTik позволяют:

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

Особенно это важно для маршрутизаторов, которые участвуют в доступе в интернет, BGP, NAT, VPN, маршрутизации, firewall, DHCP, DNS или управлении внутренней инфраструктурой.


Принцип работы

Скрипт использует Python-библиотеку paramiko для SSH-подключения к MikroTik.

После подключения выполняются команды:

/system identity print
/system resource print
/export show-sensitive terse

Команда:

/export show-sensitive terse

формирует текстовый экспорт конфигурации RouterOS, включая чувствительные параметры.

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


Структура решения

Резервные копии сохраняются в каталог:

/home/backup/mikrotik_backups

Файлы создаются в формате:

mikrotik_export_YYYY-MM-DD_HH-MM-SS.rsc

Пример:

mikrotik_export_2026-05-07_10-30-15.rsc

Срок хранения старых копий задаётся параметром:

RETENTION_DAYS = 7

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


Установка зависимостей

Для работы скрипта требуется Python 3 и библиотека paramiko.

Устанавливаем зависимости:

sudo apt update
sudo apt install -y python3 python3-pip
pip3 install paramiko

Создание каталога для резервных копий

Создаём папку:

mkdir -p /home/backup/mikrotik_backups

Выставляем права:

chmod 700 /home/backup/mikrotik_backups

Это важно, так как в экспортированной конфигурации могут находиться чувствительные данные.


Установка скрипта

Создаём файл:

nano /home/backup/mikrotik_backup.py

Содержимое скрипта:

#!/usr/bin/env python3
import datetime
import os
import pathlib
import stat
import sys
import time

import paramiko

ROUTER_HOST = "ip adress вашего микротика"
ROUTER_PORT = 22
ROUTER_USER = "Логин"
ROUTER_PASSWORD = "Пароль"
BACKUP_DIR = pathlib.Path("/home/backup/mikrotik_backups")
RETENTION_DAYS = 7


def run_cmd(ssh: paramiko.SSHClient, cmd: str) -> str:
stdin, stdout, stderr = ssh.exec_command(cmd, timeout=120)
out = stdout.read().decode("utf-8", errors="replace")
err = stderr.read().decode("utf-8", errors="replace").strip()
if err:
raise RuntimeError(f"Router command failed: {cmd}\n{err}")
return out


def main() -> int:
BACKUP_DIR.mkdir(parents=True, exist_ok=True)

ts = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
export_path = BACKUP_DIR / f"mikrotik_export_{ts}.rsc"

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
ROUTER_HOST,
port=ROUTER_PORT,
username=ROUTER_USER,
password=ROUTER_PASSWORD,
look_for_keys=False,
allow_agent=False,
timeout=15,
banner_timeout=20,
auth_timeout=20,
)

try:
identity = run_cmd(ssh, "/system identity print")
resource = run_cmd(ssh, "/system resource print")
export_cfg = run_cmd(ssh, "/export show-sensitive terse")
finally:
ssh.close()

header = (
f"# Backup time: {datetime.datetime.now().isoformat()}\n"
f"# Router: {ROUTER_HOST}\n"
f"# --- identity ---\n{identity}\n"
f"# --- resource ---\n{resource}\n"
f"# --- export show-sensitive terse ---\n"
)

export_path.write_text(header + export_cfg, encoding="utf-8")
os.chmod(export_path, stat.S_IRUSR | stat.S_IWUSR)

cutoff = time.time() - (RETENTION_DAYS * 86400)
removed = 0
for p in BACKUP_DIR.glob("mikrotik_export_*.rsc"):
try:
if p.stat().st_mtime < cutoff:
p.unlink()
removed += 1
except FileNotFoundError:
pass

print(f"Backup created: {export_path}")
print(f"Old backups removed: {removed}")
return 0


if __name__ == "__main__":
try:
raise SystemExit(main())
except Exception as e:
print(f"ERROR: {e}", file=sys.stderr)
raise SystemExit(1)

Делаем файл исполняемым:

chmod +x /home/backup/mikrotik_backup.py

Настройка параметров подключения

В начале скрипта указываются основные параметры:

ROUTER_HOST = ""
ROUTER_PORT = 22
ROUTER_USER = ""
ROUTER_PASSWORD = ""
BACKUP_DIR = pathlib.Path("/home/backup/mikrotik_backups")
RETENTION_DAYS = 7

Где:

ПараметрНазначение
ROUTER_HOSTIP-адрес MikroTik
ROUTER_PORTSSH-порт
ROUTER_USERпользователь RouterOS
ROUTER_PASSWORDпароль пользователя
BACKUP_DIRкаталог для сохранения резервных копий
RETENTION_DAYSсрок хранения старых копий

Проверка работы вручную

Запускаем скрипт:

/home/backup/mikrotik_backup.py

При успешном выполнении будет вывод:

Backup created: /home/backup/mikrotik_backups/mikrotik_export_2026-05-07_10-30-15.rsc
Old backups removed: 0

Проверяем наличие файла:

ls -lah /home/backup/mikrotik_backups/

Проверяем содержимое:

head -50 /home/backup/mikrotik_backups/mikrotik_export_2026-05-07_10-30-15.rsc

Автоматический запуск через cron

Чтобы резервная копия создавалась автоматически, можно добавить запуск в cron.

Открываем crontab:

crontab -e

Например, запуск каждый день в 03:00:

0 3 * * * /home/backup/mikrotik_backup.py >> /home/backup/mikrotik_backups/backup.log 2>&1

После этого скрипт будет ежедневно создавать резервную копию и писать результат выполнения в лог:

/home/backup/mikrotik_backups/backup.log

Проверить лог можно командой:

tail -50 /home/backup/mikrotik_backups/backup.log
Действия с записью
Назад в блог

Комментарии

Комментариев пока нет.

Войдите, чтобы оставить комментарий.