32

Автоматизация бэкапов.

Может и не совсем интересно, но кому-то может понадобиться такой мануал (ни в коем случае не реклама, только в ознакомительных целях). Мне руководитель поставил задачу на работе и вот так я ее решил....


Представим ситуацию, когда, у нас появилось слишком много филиалов и в каждом стоит роутер "Mikrotik" (в моем случае их 50+), Вы всегда делали бэкапы и сливали конфигурацию...., НО! К примеру, работаете Вы не один - это раз, надоело вручную заходить и делать бэкапы - это два, даже если уверены в своих коллегах - нужно страховаться - это три. При всем этом роутеров много и количество будет рости. *Нужно автоматизировать это дело* - подумаете Вы, этим собственно и займемся.


Нужно:

- UNIX-подобная система (в моем случае FreeBSD)

- Пара роутеров "Mikrotik" для проверки скрипта


Принцип работы скрипта:

- Скрипт будет заходить на каждый роутер указанный в массиве по SSH, под каким-либо пользователем

- Давать команду на создание бэкапа в двоичном и текстовом виде, а именно в расширениях *.backup и *.rsc

- Сливать файлы на наш сервер по SCP

- Удалять созданные бэкапы на самом роутере

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


Поехали....

1: Создадим сначала пользователя, с нужными на правами. Заходим на наш микротик, в меню жмакаем System -> Users и переходим в открывшемся окне на вкладку Group, нажимаем на "+", чтобы добавить новую группу (я назвал ее script) и назначаем права как на картинке:

Далее переходим в вкладку Users и там жмем снова "+" вбиваем название пользователя, назначаем нашу созданную группу и пароль. Пусть будет у нас "Валли"

Должно получиться так:

2: Теперь нам нужно сгенерировать публичный ключ - для того, чтобы, скрипт подключался к микротику по ssh не спрашивая пароль т.е. автоматически. Заходим на наш FreeBSD под root'ом (для не знающих команда sudo su) и генерируем ключ командой: ssh-keygen -t dsa.

Будет вопрос в каком каталоге сохранять? я оставляю по дефолту, поэтому Enter, так же будет вопрос о пароле на ключ, оставляем пустой т.е. тоже нажимаем Enter.

Должно получиться так:

Проверить наличие сгенерированного ключа можно так: ls -lh /root/.ssh/ и увидите в списке свой файл, с названием id_dsa.pub.

3: Следом надо залить ключ на микротик. Возвращаемся к микротику, нажимаем IP -> Services и там есть сервис "ftp", если он выключен, то включите.

Возвращаемся на сервер и переходим в каталог с нашим ключом: cd /root/.ssh/.

Подключаемся на микротик через FTP командой: ftp 192.168.88.1

Спросит имя пользователя, вводим нашего: walle, следом пароль от него и увидите приветствие микротика:

Вводим команду передачи ключа: put id_dsa.pub и ....

Это говорит о том, что передача успешна и завершилась, вводим: exit.


4. Теперь надо назначить ключик нашему пользователю, переходим на роутер.

Откройте Files, там увидите свой ключик:

Нажимаем в главном меню роутера New Terminal и вводим такую строку: user ssh-keys import public-key-file=id_dsa.pub user=walle. Команда выполнится молча. Проверяем импортировался ли ключ, переходим System -> Users в вкладке SSH Keys увидите ключ импортированный для пользователя walle.

Ключ мы успешно импортировали и он будет работать.

Переходим на наш FreeBSD и пробуем подключиться по SSH с использованием ключа: ssh walle@192.168.88.1.

При первом подключении вам зададут вопрос: Are you sure you want to continue connecting (yes/no)? - отвечаем: yes. Больше спрашивать не будет.

После увидите приветствие роутера.


5. Необходимо на нашем FreeBSD создать папку для бэкапов, сделал я вот такой командой: mkdir /var/mikrotik_backups/.

Назначил полные права папке chmod 777 /var/mikrotik_backups/.


6. Необходимо создать сам файл скрипта: перехожу в свой каталог cd /usr/home/Dopelngager/ и создаем файл скрипта: touch backup_mikrotik.

Назначаю точно так же полные права chmod 777 backup_mikrotik.


7. Пришли теперь к основному, а именно к написанию скрипта.

Открываем файл скрипта командой: ее backup_mikrotik

и записываем в файл вот это:


#!/usr/local/bin/bash
routers=( 192.168.88.1 )
backupdir="/var/mikrotik_backups/"
privatekey="/root/.ssh/id_dsa"
login="walle"
DATE="`date '+%Y-%m-%d'`"
for r in ${routers[@]}; do
cmd_backup="/system backup save name=${r}.backup"
ssh ${login}@$r -i $privatekey "${cmd_backup}" > /dev/null
sleep 2
cmd_backup="/export file=${r}"
ssh ${login}@$r -i $privatekey "${cmd_backup}" > /dev/null
sleep 5
scp -i $privatekey ${login}@${r}:${r}.backup ${backupdir}$r-$DATE.backup
scp -i $privatekey ${login}@${r}:${r}.rsc ${backupdir}$r-$DATE.rsc
ssh ${login}@$r -i $privatekey "/file remove \"${r}.backup\""
ssh ${login}@$r -i $privatekey "/file remove \"${r}.rsc\""
done
find $backupdir* -mtime +3 -exec rm {} \;


Если у вас не один роутер, то, шаги с 1 по 4 нужно сделать с каждым и в скрипт добавить роутеры в строку "routers", между скобок. ОБЯЗАТЕЛЬНО!: добавлять роутеры через пробел и пробелы около скобок тоже должны быть! Для примера добавим еще один роутер:

routers=( 192.168.88.1 192.168.88.2 ).

Проверим наш скрипт, вводим команду: ./backup_mikrotik

Должен пойти процесс скачивания и сохранения файлов.


8. Остался последний шаг - это добавить скрипт в планировщик.

Вводим команду открытия планировщика Cron: ее /etc/crontab

Добавляем строки:

#backup Mikrotik routers

* 21 * * * root /usr/home/Dopelngager/backup_mikrotik

Сохраняем и необходимо перезапустить cron: /etc/rc.d/cron restart.


Таким образом я запланировал работу скрипта ежедневно в 21 час, еженедельно, ежемесячно, ежегодно. ВАЖНО! Соблюдайте пробелы и табуляции при добавлении записей в файл, cron чувствителен к этим вещам. А лучше про него подробнее почитайте в интернете.


У меня все, надеюсь было полезно. За ошибки и шакальные картинки простите. Unix-подобные системы знаю плохо, только учусь - так что сильно не придирайтесь. Если у кого есть вариант улучшить скрипт или его работу - обязательно приму во внимание.

А вот кстати результат работы срипта:

0
Автор поста оценил этот комментарий

Хорош ваш вариант, заморочист.

Но, я из ЛЛ, набросал для себя вот такой инструмент:

Создаём bat'ничек:


-----------------------------------------

#логин и пароль для подключения к роутеру

set login=backup

set pass=backup

#перечень сетей от 11 до 150 (у микротов адрес 250)

set fip=11

set lip=150

# цикл, перебирает  сети

# на каждом адресе выполняет команду

# делаем команду export

# вывод направляем в файл, файл называем адресом сети

for /l %%i in (%fip%,1,%lip%) do ping -n 1 192.168.%%i.250 | find /i "ttl" >> current_ip.txt && plink.exe -ssh -P 1422 -l %login% -pw %pass% -batch 192.168.%%i.250 export > backup/%%i_net.txt

-----------------------------------------


Для успешного выполнения команды требуется добыть для себя  "пропатченный" plink.exe

С автоматическим принятием hostkey'я

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Возможно, прикольно. Я у себя исключил вариант написания батника т.к. не хочу привязывать выполнение к машине, которую возможно выключу - но при этом у меня есть в наличии целая пачка серверов - один из них при этом является нетмонитором (все это было до моего трудоустройства) - оставалось только написать нужный скрипт, да и я тоже из ЛЛ, поэтому не хочу контролировать процесс. Штукенция молотит уже несколько месяцев безотказно. Все это очень тонко, некоторых вон высылка конфига на почту устраивает (штатная тулза микротика) - как по мне это извращение, при наличии готовых решений и средств. Батник конечно не плохо, кстати были случаи несрабатывания? Ну к примеру если микротик не в сети оказался...

показать ответы
0
Автор поста оценил этот комментарий
Суббота, вечер, диван, пиво, телевизор -а тут такой пост. Мужик, ты сейчас с кем разговариваешь?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Так я это...тоже пиво пил)).
0
Автор поста оценил этот комментарий
схоронил, может пригодится.

хотя у нас зоопарк из цисок и длинков и ни одной фрибзди )

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Напишу как нибудь, как через ftp тянуть на локальную тачку, правда с dlink’ами не пробовал, опробовано на микротике, snr и cisco. Возможно тоже пригодится. А мониторите как? Zabbix то хоть есть?
показать ответы
0
Автор поста оценил этот комментарий

вы когда-нибудь слышали о, например, ansible?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Слышал и читал на хабре как-то, но она разве не для развертывания конфигов тачек? Я просто с ней не сталкивался в живую и не представляю как конфиги роутеров и коммутов тянуть через неё. И я не против готовых решений, но смысл развертывать ansible, когда тут 20 строк скрипта сделают тоже самое? Да и конфиг у нас везде разный, хоть и придерживаемся своего стандарта. Оно может и круто, но чёт думается мне - немного геморойно.... или объясните, может я не прав? Сами пользуетесь? Может и попробую, если действительно хорошая штука...
показать ответы
DELETED
Автор поста оценил этот комментарий
А не проше завести почту и тупо отправлять бакап роутера на нее?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Проще, ещё и по ftp проще. Но я не пошёл легким путём и решил выкачивать по scp, ради спортивного интереса. А на почте кстати автоматом не удаляются письма, все равно мудрить придётся. Ну и ещё в качестве аргумента - мне на локальном сервере хранение спокойней.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества