Создавать бекапы оборудования 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
На этом все можно наслаждаться автоматизацией работы, и у нас всегда будут бекапы которые рано или поздно нас выручат.
Понравилась или оказалась полезной статья, поблагодари автора
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Привет, я люблю ваш скрипт, но у меня есть одна проблема 🙁 есть ли какая-либо возможность для резервного копирования папки, также содержат личность mikrotik? Можете ли вы помочь мне с этим? Спасибо! Алос, я использую google translate, так что извините, если что-то неправильно переведено.
Добрый день! Не совсем понятно что имели ввиду «резервного копирования папки, также содержат личность mikrotik?» Напишите на английском вопрос, посмотрим.
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 🙁
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»)
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!
I`ll try it to help, as far as possible.
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 🙁