Резервное копирование конфигурации сетевого оборудования — одна из базовых задач эксплуатации сети. Даже если оборудование работает стабильно, всегда остаются риски: ошибочное изменение настроек, сбой устройства, неудачное обновление 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_HOST | IP-адрес MikroTik |
ROUTER_PORT | SSH-порт |
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
Комментариев пока нет.