Ещё один вариант бэкапа

Здесь выкладываем скрипты
podarok66
Модератор
Сообщения: 3114
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Ещё один вариант бэкапа

Сообщение podarok66 » 08 янв 2017, 18:47

Изначально писал для ЖЖ, потом решил скинуть сюда, прошу критики и помощи в корректировании. Обещаю не кусаться :hi_hi_hi:
У меня появилась нужда в бэкапировании целой сети Микротиков. Из которых лишь один имел "белый" адрес. Зато вся эта куча устройств была между собой связана в единую сеть. Сначала я собирал бэкапы на одном устройстве. Но мне показалось это слишком расточительным расходом свободной памяти головной железки и я решил перенести хранилище на VDS, благо тот имеется и в полном моём распоряжении.
Итак начнем:
Первым шагом должна была быть генерация сертификатов доступа по ssh и настройка самого доступа по этим самым сертификатам. Это мероприятие описано не раз и не пять, повторять чужие мануалы дело неблагодарное. Поэтому я опускаю эту достаточно тривиальную процедуру. У меня это давно применяется на большинстве устройств. Позволю лишь напомнить, что пользователь (ну скажем пусть его логин будет Vasya), под которым настроен доступ по сертификату должен быть отдельный, для доступа по паролю нужно создать другого юзера (например Fedya). И еще, юзер Vasya все равно должен иметь пароль и доступ по ftp (на ftp действие сертификата не распространяется). На всех остальных Микротиках будем иметь соответственно пользователей Vasya1, Vasya2, и т. д. с подобными правами.
Далее идем на VDS. У меня на сервере установлена Debian 8, очень дружелюбная и понятная система. Думаю, люди, у которых вместо нее стоит другой дистрибутив, разберутся в нюансах. В принципе, все везде очень похоже. Итак, напомню, головной Микротик имеет реальный адрес, все остальные объединены с головным в локальную сеть различными способами (это и туннели, и мосты, и просто проводное соединение), но главное, они все имеют адрес в локальной сети головного устройства. Для доступа к ним по ssh надо создать в каталоге .ssh файл config следующего содержания (рассмотрим вариант с двумя локальными устройствами):

Код: Выделить всё

Host Tik1
HostName 192.168.1.33
User Vasya1
ProxyCommand ssh -W %h:%p Vasya@104.224.131.157

Host Tik2
HostName 192.168.1.193
User Vasya2
ProxyCommand ssh -W %h:%p Vasya@104.224.131.157

Теперь разберем. 192.168.1.33 и 192.168.1.193 адреса локальных Микротиков, Vasya1 и Vasya2 это юзеры на этих Микротиках с настроенным входом по ssh с помощью сертификата, 104.224.131.157 - "белый" адрес головного Микротика и Vasya - юзер на нем. Всё это дело сохраняем. Ну вот, теперь по команде ssh Tik1 мы попадаем на Микротик с локальным адресом 192.168.1.33, по команде ssh Tik2 - соответственно 192.168.1.193 . Проверяем, входит. Что нам и требовалось. Теперь на VDS создаем директории:

Код: Выделить всё

mkdir /home/user/scripts
mkdir /home/user/backup

В scripts создаем файл

Код: Выделить всё

nano /home/user/scripts/mik.sh

Содержание файла:

Код: Выделить всё

#!/bin/bash
# Задаем переменную даты
DATE=`/bin/date '+%d.%m.%Y'`

# Идем в директорию хранения бэкапов
cd /home/user/backup

# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке,
# где Tikpass - пароль на головном Микротике и 192.168.1.1 - его локальный адрес
ssh Tik1 '/system backup save dont-encrypt=yes name=Tik1.backup; :delay 10; /tool fetch address=192.168.1.1 src-path=Tik1.backup user=Vasya password=Tikpass port=21 mode=ftp dst-path=Tik1.backup upload=yes; /file remove Tik1.backup; :delay 5; quit'

# Утилитой wget скачиваем бэкап,прибавляя к имени дату
wget -O Tik1-$DATE.backup --user=Vasya --password=Tikpass ftp://104.224.131.157/Tik1.backup

# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке
ssh Tik2 '/system backup save dont-encrypt=yes name=Tik2.backup; :delay 10; /tool fetch address=192.168.1.1 src-path=Tik2.backup user=Vasya password=Tikpass port=21 mode=ftp dst-path=Tik2.backup upload=yes; /file remove Tik2.backup; :delay 5; quit'

# Утилитой wget скачиваем бэкап,прибавляя к имени дату
wget -O Tik2-$DATE.backup --user=Vasya --password=Tikpass ftp://104.224.131.157/Tik2.backup

# Даём команду на создание бэкапа с именем Tik_big.backup и выходим
ssh Vasya@104.224.131.157 '/system backup save dont-encrypt=yes name=Tik_big.backup; :delay 10; quit'

# Утилитой wget скачиваем бэкап,прибавляя к имени дату
wget -O Tik_big-$DATE.backup --user=Vasya --password=Tikpass ftp://104.224.131.157/Tik_big.backup

# Идем на удаленное устройство и удаляем файлы бэкапов оттуда
ssh Vasya@104.224.131.157 '/file remove Tik_big.backup; :delay 5; /file remove Tik1.backup; :delay 5; /file remove Tik2.backup; :delay 5; quit'

# Архивируем полученный результат и подчищаем за собой
tar -cvjpf /home/user/backup/RB-$DATE.tar.bz2 /home/user/backup/Tik_big-* /home/user/backup/Tik2-* /home/user/backup/Tik1-*
rm -rf /home/user/backup/Tik_big-* /home/user/backup/Tik2-* /home/user/backup/Tik1-*


Сохраняем файл Ctrl+o,выходим из редактора Ctrl+x и делаем файл исполняемым

Код: Выделить всё

chmod +x /home/user/scripts/mik.sh


Теперь настроим расписание

Код: Выделить всё

crontab -e


и вставляем в конце строку

Код: Выделить всё

@weekly /home/user/scripts/mik.sh start


Теперь скрипт будет стартовать раз в неделю по воскресеньям. А мы будем иметь в директории backup архивы с еженедельными бэкапами.
Само собой, способ не претендует на лавры рецепта. Но попробовать-то можно. Приемлю любую конструктивную критику и подсказки.

Кстати, пробовал загрузку осуществить с помощью встроенной в RouterOs утилиты, переписав скрипт. Вот только устройство грузится просто на 100% и на минуту выпадает из работы. Решил, что такого счастья нам не надоть. Оставил пока как есть.

Впрочем вот тело скрипта, где 101.221.12.4 - адрес сервера, ftp - юзер с правами работы и в ssh и в ftp, ftppass - пароль юзера ftp

Код: Выделить всё

#!/bin/bash
# Задаем переменную даты
DATE=`/bin/date '+%d.%m.%Y'`

# Идем в директорию хранения бэкапов
cd /home/ftp/backup

# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке
ssh Tik1 '/system backup save dont-encrypt=yes name=Tik1.backup; :delay 10; /tool fetch address=101.221.12.4 src-path=Tik1.backup user=ftp password=ftppass port=21 mode=ftp dst-path=backup/Tik1.backup upload=yes; :delay 20; /file remove  Tik1.backup; :delay 5; quit'

# Воспользовавшись настроенным конфигом, лезем на следующий Микротик в локалке
ssh Tik2 '/system backup save dont-encrypt=yes name=Tik2.backup; :delay 10; /tool fetch address=101.221.12.4 src-path=Tik2.backup user=ftp password=ftppass port=21 mode=ftp dst-path=backup/Tik2.backup upload=yes; :delay 20; /file remove Tik2.backup; :delay 5; quit'

# Даём команду на создание бэкапа на головном устройстве
ssh podarok66@104.224.131.157 '/system backup save dont-encrypt=yes name=Tik_big.backup; :delay 20;/tool fetch address=101.221.12.4 src-path=Tik_big.backup user=ftp password=ftppass port=21 mode=ftp dst-path=backup/Tik_big.backup upload=yes; :delay 30; /file remove  Tik_big.backup; :delay 5; quit'


# Архивируем полученный результат
tar -cvjpf /home/ftp/backup/RB-$DATE.tar.bz2 /home/ftp/backup/Tik_big* /home/ftp/backup/Tik1* /home/ftp/backup/Tik2*
rm -rf /home/ftp/backup/Tik_big* /home/ftp/backup/Tik1* /home/ftp/backup/Tik2*

Возможно кому-то придется по душе использование Микротиковской фишки и краткость скрипта, а минутная нагрузка на маршрутизатор неактуальна. Удачи всем..
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...

Вернуться в «Готовые скрипты Mikrotik»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость