Автоматизация создания бекапов с устройств Mikrotik на Linux

Создавать бекапы оборудования Mikrotik будем с помощью Bash-скрипта на Ubuntu 14.04 Trusty Tahr. Входе выполнения скрипта, будет осуществлен прозрачный вход на оборудование Mikrotik (как настроить прозрачное подключение к Mikrotik по SSH, читаем тут). Так же бекапы будем хранить на сетевом ресурсе, поэтому в примере скрипта будет выполнено монтирование сетевого диска.

 

Предполагается создание бекапа не одного устройства Mikrotik, поэтому подготовим заранее текстовый файл со списком IP-адресов всех устройств Mikrotik, которых хотим делать бекап.

nano adress_mikrotik
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7

Создаем файл скрипта:

nano backup_mikrotik

 

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

#!/bin/bash

#################################
# Переменные для работы скрипта #
#################################
# Значение текущей даты
date=$(date +%d-%m-%Y)
# Значение текущего времени
time=$(date +%H-%M)
# Имя пользователя для подключения к Mikrotik
username="admin"
# Путь к файлу с ip адресами оборудований
mikrotik="/home/admin/adress_mikrotik"
# Временная папка
tmp="/home/admin/mikrotik/"
# Логи
log=$tmp"/log.txt"
#-------------------------------#
# Хранилище бекапов
smb_path_backup="//192.168.1.2/Backups"
# Название домена (Верхний вегистр)
domain="JAKONDA.LOCAL"
# Имя пользователя
usrname="jakonda"
# Пароль
passwd="Aa1234567"
########################################
# Рабочий листинг бекапа Спартака #
########################################
# Перебираем циклом файл с адресами оборудования и делаем бекапы по каждому из них
for i in $( cat $mikrotik ); do
# Создаем временную папку для работы скрипта
mkdir -p $tmp"/"$i
# Получаем имя оборудования
RESULT=$(ssh $username"@"$i "system identity print" | awk ' {print $2} ');
echo "Начало резервного копирования оборудования Mikrotik"
echo "Начало резервного копирования оборудования Mikrotik ($time) $RESULT" > $log
# Создаем бекап оборудования
echo "Создание бекапа оборудования $i..."
ssh $username"@"$i "system backup save name=backup";
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
echo "Создание бекапа $i успешно ($time)" >> $log
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[ОШИБКА]"
echo "Создание бекапа $i неудачно ($time)" >> $log
echo
fi

# Создаем текстовый файл конфигурации
echo "Создание бекапа текстового файла конфигурации оборудования $i..."
ssh $username"@"$i "export file=backup.rsc";
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
echo "Создание бекапа текстового файла конфигурации $i успешно ($time)" >> $log
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[ОШИБКА]"
echo "Создание бекапа текстового файла конфигурации $i неудачно ($time)" >> $log
echo
fi
# Создаем каталог для бекапа оборудования
echo "Создаем директорию для размещения бекапа..."
mkdir -p $tmp/$i/$date/
echo "Создана временная директория для размещения бекапа с оборудовнаия $i ($time)" >> $log

# Скачивание созданных файлов бекапов с оборудования
echo "Скачивание полученных бекап файлов с оборудования $i..."
sftp $username"@"$i":backup.backup" $tmp/$i/$date/$i"-"$time".backup";
sftp $username"@"$i":backup.rsc" $tmp/$i/$date/$i"-"$time".rsc";
if [ $? -eq 0 ]; then
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]"
echo "Скачивание бекапов с оборудования $i успешно ($time)" >> $log
echo
else
echo -n "$(tput hpa $(tput cols))$(tput cub 6)[ОШИБКА]"
echo "Скачивание бекапов с оборудования $i неудачно ($time)" >> $log
echo
fi

# Архивируем полученный бекап
echo "Архивация бекапов..."
cd $tmp/$i/
RESULT=$(tar -czvf $date".tar.gz" $date)
echo "Бекапы за архивированны ($time)" >> $log

# Подключаем сетевое хранилище
echo "Подключение сетевого хранилища $smb_path_backup..."
RESULT=$(cat /home/admin/sudos | sudo -S -u root mount -t cifs $smb_path_backup /mnt/samba -o username=$usrname,password=$passwd,domain=$domain)
echo "Сетевое хранилище $smb_path_backup подключено ($time)" >> $log

# Создаем каталог для размещения бекапа в сетевом хранилище, если он не создан.
echo "Создаем каталог для размещения бекапов оборудоваия $i..."
RESULT=$(cat /home/admin/sudos | sudo -S -u root mkdir -p /mnt/samba/Mikrotik/$i)
echo "Каталог для размещения бекапов оборудования $i в сетевом хранилище создан ($time)" >> $log

# Перемещаем созданный архив в хранилище
echo "Размещение бекапов в сетевом хранилище..."
RESULT=$(cat /home/admin/sudos | sudo -S -u root mv $tmp/$i/$date".tar.gz" "/mnt/samba/Mikrotik/$i/$date.tar.gz")
echo "Бекапы оборудования $i перемещены в "$smb_path_backup"/$i ($time)" >> $log
echo "" >> $log

# Перемещаем лог файл в папку с бекапом
RESULT=$(cat /home/admin/sudos | sudo -S -u root mv $log "/mnt/samba/MIkrotik/$i/$date.log.txt")

# Подчишаем за собой на оборудование
echo "Удаляем файлы бекапа с оборудования $i"
ssh $username"@"$i "file remove backup.backup";
ssh $username"@"$i "file remove backup.rsc";
rm -r -f $tmp
# Размонтируем сетевой диск
cat /home/admin/sudos | sudo -S -u root umount $smb_path_backup
done

 

Делаем скрипт исполняемым:

chmod +x backup_mikrotik

 

Запускаем скрипт и проверяем его работу. В итоге будут созданы папки по каждому оборудованию и в каждой папке будут вот так располагаться бекапы с лог-файлами. 

 

 

Добавим в планировщик (crontab) выполнение его по заданному времени

crontab -e

Выполнять скрипт мы будем каждый день в 23:50

50 23 * * * /home/admin/auto_backup_mikrotik

 

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

 

Понравилась или оказалась полезной статья, поблагодари автора

 

 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА

БесполезноСлабоватоПриемлемоОтличноПревосходно (Еще нет оценок)
Загрузка...

Всего комментариев: 7 Комментировать

  1. Marko /

    Привет, я люблю ваш скрипт, но у меня есть одна проблема 🙁 есть ли какая-либо возможность для резервного копирования папки, также содержат личность mikrotik? Можете ли вы помочь мне с этим? Спасибо! Алос, я использую google translate, так что извините, если что-то неправильно переведено.

  2. Жаконда / Автор записи

    Добрый день! Не совсем понятно что имели ввиду «резервного копирования папки, также содержат личность mikrotik?» Напишите на английском вопрос, посмотрим.

  3. Marko /

    Hehe ok 🙂 i will try. When script makes new folder of mikrotik device from addresss_mikrotik folder name contain only ip address from list «e.g. 192.168.1.88» but i will like when new folder is maid to contain also identity of mikrotik from backup is made. So i would like to have somthing like «e.g. Company_192.168.1.88 Company1_192.168.1.88» so that i know from witch company is mikrotik if its default IP. Thank you for you quick answer i just dont have any knowledge about scripting 🙁

    1. Жаконда / Автор записи

      Now it`s better to understanding what you want to do))
      Try make changes in code, thats must be good. Sorry check it i cant.

      After line:
      # Получаем имя оборудования
      RESULT=$(ssh $username»@»$i «system identity print» | awk ‘ {print $2} ‘);

      Add code:
      MIKROTIK_NAME=$RESULT

      Then, after that line:
      # Создаем каталог для бекапа оборудования
      echo «Создаем директорию для размещения бекапа…»

      Replace that line:
      mkdir -p $tmp/$i/$date/

      By that:
      mkdir -p $tmp/$MIKROTIK_NAME»_»$i/$date/

      Replace thats lines:
      sftp $username»@»$i»:backup.backup» $tmp/$i/$date/$i»-«$time».backup»;
      sftp $username»@»$i»:backup.rsc» $tmp/$i/$date/$i»-«$time».rsc»;

      By that lines:
      sftp $username»@»$i»:backup.backup» $tmp/$MIKROTIK_NAME»_»$i/$date/$MIKROTIK_NAME»_»$i»-«$time».backup»;
      sftp $username»@»$i»:backup.rsc» $tmp/$MIKROTIK_NAME»_»$i/$date/$MIKROTIK_NAME»_»$i»-«$time».rsc»;

      Replace:
      cd $tmp/$i/

      By:
      cd $tmp/$MIKROTIK_NAME»_»$i/

      Replace that:
      RESULT=$(cat /home/admin/sudos | sudo -S -u root mkdir -p /mnt/samba/Mikrotik/$MIKROTIK_NAME»_»$i)

      By that:
      RESULT=$(cat /home/admin/sudos | sudo -S -u root mkdir -p /mnt/samba/Mikrotik/$MIKROTIK_NAME»_»$i)

      Replace:
      RESULT=$(cat /home/admin/sudos | sudo -S -u root mv $tmp/$MIKROTIK_NAME»_»$i/$date».tar.gz» «/mnt/samba/Mikrotik/$MIKROTIK_NAME»_»$i/$date.tar.gz»)

      By:
      RESULT=$(cat /home/admin/sudos | sudo -S -u root mv $tmp/$MIKROTIK_NAME»_»$i/$date».tar.gz» «/mnt/samba/Mikrotik/$MIKROTIK_NAME»_»$i/$date.tar.gz»)

      Replace:
      RESULT=$(cat /home/admin/sudos | sudo -S -u root mv $log «/mnt/samba/MIkrotik/$MIKROTIK_NAME»_»$i/$date.log.txt»)

      By:
      RESULT=$(cat /home/admin/sudos | sudo -S -u root mv $log «/mnt/samba/MIkrotik/$MIKROTIK_NAME»_»$i/$date.log.txt»)

  4. Marko /

    Hi, me again. I get same result when i was trying to do something on my own 🙁 in new line that you tell me «MIKROTIK_NAME=$RESULT» i got result like MIKROTIK_NAME=$’Company\r’ and whole directory is in mess i found on internet that have something with msdos coding and that windows leave that \r on the end of name when linux try to make folders but like i said early i dont have any skill in scripting so i dont know what to do 🙁 Thank you very much for helping me!

    1. Жаконда / Автор записи

      I`ll try it to help, as far as possible.

      1. Marko /

        Hi, me again. Here is some output to see more about problem.

        root@MikroTik-BKP:/home/admin/Mikrotik# ./test.sh
        ++ date +%d-%m-%Y
        + date=26-10-2018
        ++ date +%H-%M
        + time=11-12
        + username=backup
        + mikrotik=/home/admin/Mikrotik/adress_mikrotik
        + tmp=/home/admin/Mikrotik
        + log=/home/admin/Mikrotik/log.txt
        + smb_path_backup=//192.168.1.3/TikBak
        + domain=STORAGE.LOCAL
        + usrname=tik
        + passwd=1234
        ++ cat /home/admin/Mikrotik/adress_mikrotik
        + for i in ‘$( cat $mikrotik)’
        + mkdir -p /home/admin/Mikrotik/
        ++ awk ‘{print $2}’
        ++ ssh backup@192.168.1.88 ‘system identity print’
        + RESULT=$’Company\r’
        + echo ‘Start of backup equipment Mikrotik’
        Start of backup equipment Mikrotik
        ‘ echo ‘Starting Mikrotik hardware backup Mikrotik (11-12) Company
        + MIKROTIK_NAME=$’Company\r’
        + echo ‘Creating hardware backup 192.168.1.88…’
        Creating hardware backup 192.168.1.88…
        + ssh backup@192.168.1.88 ‘system backup save name=backup’
        Configuration backup saved
        + ‘[‘ 0 -eq 0 ‘]’
        +++ tput cols
        ++ tput hpa 237
        ++ tput cub 6
        + echo -n ‘ [OK]’
        [OK]+ echo ‘Creating backup 192.168.1.88 successfully (11-12)’
        + echo

        + echo ‘Creating a backup of the text file configuration hardware 192.168.1.88…’
        Creating a backup of the text file configuration hardware 192.168.1.88…
        + ssh backup@192.168.1.88 ‘export file=backup.rsc’
        + ‘[‘ 0 -eq 0 ‘]’
        +++ tput cols
        ++ tput hpa 237
        ++ tput cub 6
        + echo -n ‘ [OK]’
        [OK]+ echo ‘Creating a backup of the configuration text file 192.168.1.88 successfully (11-12)’
        + echo

        + echo ‘Create a directory to place backup…’
        Create a directory to place backup…
        + mkdir -p $’/home/admin/Mikrotik/Company\r_192.168.1.88/26-10-2018/’
        + echo ‘A temporary directory was created to place a backup with equipment 192.168.1.88 (11-12)’
        + echo ‘Downloading the received backup files from the hardware 192.168.1.88…’
        Downloading the received backup files from the hardware 192.168.1.88…
        + sftp backup@192.168.1.88:backup.backup $’/home/admin/Mikrotik/Company\r_192.168.1.88/26-10-2018/Company\r_192.168.1.88-11-12.backup’
        Connected to 192.168.1.88
        Fetching /backup.backup to /home/admin/Mikrotik/Company
        /backup.backup 100% 191KB 191.3KB/s 00:00
        + sftp backup@192.168.1.88:backup.rsc $’/home/admin/Mikrotik/Company\r_192.168.1.88/26-10-2018/Company\r_192.168.1.88-11-12.rsc’
        Connected to 192.168.1.88.
        Fetching /backup.rsc to /home/admin/Mikrotik/Company
        /backup.rsc 100% 40KB 39.8KB/s 00:00
        + ‘[‘ 0 -eq 0 ‘]’
        +++ tput cols
        ++ tput hpa 237
        ———————————————————————————————————
        I tried in this line
        RESULT=$(ssh $username»@»$i «system identity print» | awk ‘{print $2}’);

        in awk to remove \r and $ whit some command i forgot witch one 🙂 i tried alot and i got clear name in MIKROTIK_NAME=$RESULT but later in this line and alot more lines where is MIKROTIK_NAME

        sftp $username»@»$i»:backup.backup» $tmp/$MIKROTIK_NAME»_»$i/$date/$MIKROTIK_NAME»_»$i»-«$time».backup»;

        i got lot more \r\r than orginal awk command at the and of $MIKROTIK_NAME

        i tried also dos2unix command to file and sed -i ‘s/\r//g’ filename and other similar stuff still no luck 🙁

Оставить ответ

пятнадцать + 18 =

© IT-блог Жаконды All Rights Reserved.
Яндекс.Метрика