Может и не совсем интересно, но кому-то может понадобиться такой мануал (ни в коем случае не реклама, только в ознакомительных целях). Мне руководитель поставил задачу на работе и вот так я ее решил....
Представим ситуацию, когда, у нас появилось слишком много филиалов и в каждом стоит роутер "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-подобные системы знаю плохо, только учусь - так что сильно не придирайтесь. Если у кого есть вариант улучшить скрипт или его работу - обязательно приму во внимание.
А вот кстати результат работы срипта: