Для устройств Mikrotik существуют два основных вида бэкапов:
- Бинарный бэкап (
.backup): содержит всё, но подходит только для того же устройства (или идентичного). - Экспорт конфигурации (
.rsc): текстовый файл с командами, который можно читать и частично применять на других устройствах.
Я написал скрипт, который автоматизирует создание обоих типов бэкапов и скачивает их на центральный сервер.
Использование#
Скрипт вызывается с указанием конфигурационного файла для конкретного устройства:
/usr/local/bin/mbkp /etc/mikrotik_backup/router-core01.cfgСам скрипт (mbkp)#
Основная логика работы:
#!/bin/bash
# mikrotik-backup script
# author Tenhi
# Initial checks
[[ -z "$1" ]] && echo "ERR: no config file provided" && exit 1
! [[ -r "$1" ]] && echo "ERR: cannot read $1" && exit 1
# Default variables
TGT_PORT="22"
TGT_USER="bkpuser"
IDL="5s"
BKP_BINPWD="SecretBinaryPassword"
BKP_EXPPWD="SecretExportPassword"
ST_RTN="30" # 30 days retention
ST_ROOT="/mnt/bkp_share/mikrotik"
# Load target config
source $1
# Utils definitions
CMD_SSH=$(which ssh)
CMD_SCP=$(which scp)
CMD_DATE=$(date +%Y%m%d_%H%M)
TGT_BKPNAME_BIN=$ST_HOSTNAME"_"$CMD_DATE".backup"
TGT_BKPNAME_EXP=$ST_HOSTNAME"_"$CMD_DATE".export"
SSH_OPT=" -o ConnectionAttempts=5 -o ConnectTimeout=5s \
-o PasswordAuthentication=no -o PreferredAuthentications=publickey \
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
-o GlobalKnownHostsFile=/dev/null -o CheckHostIP=no "
SSH_STR="$CMD_SSH -2 -4 -p $TGT_PORT -l $TGT_USER $TGT_IP $SSH_OPT"
SCP_STR="$CMD_SCP -2 -4 -B $SSH_OPT -P $TGT_PORT $TGT_USER@$TGT_IP:/$TGT_BKPNAME_BIN $ST_FULL"
# ... (функции создания директорий и ротации логов)
# Основная функция бинарного бэкапа
function fn_backup_binary {
T_BKPSTR="system backup save name=$TGT_BKPNAME_BIN dont-encrypt=no password=$BKP_BINPWD"
T_BKPCLN="file remove [find name=$TGT_BKPNAME_BIN]"
$SSH_STR $T_BKPSTR
sleep $IDL && $SCP_STR
sleep $IDL && $SSH_STR $T_BKPCLN
}
# Функция экспорта (с шифрованием на лету через openssl)
function fn_backup_export {
# NOTE: decrypt with: openssl des3 -d -salt -in file.des3 -out file.txt
EXP_TMP_FILE="/tmp/"$RANDOM".export"
sleep $IDL && $SSH_STR export > $EXP_TMP_FILE
openssl des3 -salt -k $BKP_EXPPWD -in $EXP_TMP_FILE -out $ST_FULL$TGT_BKPNAME_EXP".des3"
rm $EXP_TMP_FILE
}
# ... (вызов функций)Скрипт выполняет подключение по SSH ключам, инициирует создание бэкапа на устройстве, скачивает его и удаляет временный файл на роутере. Текстовый экспорт дополнительно шифруется локально, чтобы не хранить чувствительные данные в открытом виде.
Looking for a Senior DevOps or DevSecOps?
I help companies modernize their infrastructure, optimize Cloud/On-Premise costs, and build secure DevSecOps cultures.
