Как настроить бэкап Mikrotik через ssh

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

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

На Mikrotik разделе IP-Services включаем доступ по ssh (при необходимости укажите в поле Available from, из каких подсетей или IP-адресов будет разрешен доступ):

Теперь создаем пользователя mikrotik-backup и добавляем в группу Full. Рекомендуется сделать отдельную группу и дать минимальные права на чтение, запись и ssh. Но у меня не заработал такой вариант при копировании с микротика по scp, поэтому добавил в группу full.

На сервере создаем такого же юзверя mikrotik-backup и генирим под ним ключ: ssh-key-gen, без пароля, cat id_rsa.pub >> authorized_keys

Переносим ключ на микротик под имеющейся админской учеткой, двоеточие в конце обязательно:

scp id_rsa.pub admin@192.168.88.1: 

На микроте выполняем:

user ssh-keys import public-key-file=id_rsa.pub user=mikrotik-backup

Проверяем, что с сервера по ssh можем ходить на микротик без пароля:

ssh 192.168.88.1

Сам скрипт:

#!/bin/bash
routers=( 192.168.88.10 192.168.88.1 10.10.5.2 10.10.6.2 )
backupdir="/backup/mikrotik"
privatekey="/home/mikrotik-backup/.ssh/id_rsa"
login="mikrotik-backup"
fulldir="${backupdir}/`date +%Y`/`date +%m`/`date +%d`"
  
for r in ${routers[@]}; do
    cmd_backup="/system backup save name=${r}.backup"
    ssh ${login}@$r -i $privatekey "${cmd_backup}" > /dev/null
    cmd_backup="/export file=${r}"
    ssh ${login}@$r -i $privatekey "${cmd_backup}" > /dev/null
    sleep 5
    mkdir -p $fulldir
    scp -i $privatekey ${login}@${r}:/${r}.backup ${fulldir}
    scp -i $privatekey ${login}@${r}:/${r}.rsc ${fulldir}
    ssh ${login}@$r -i $privatekey "/file remove \"${r}.backup\""
    ssh ${login}@$r -i $privatekey "/file remove \"${r}.rsc\""
done

Пояснение: в список добавляются айпи всех нужных роутеров, на которых импортированы ключи для безпарольного доступа, создаются дефолтные пути бэкапа. В цикле проходимся по всем роутерам, посылая по ssh команду бэкапа, а потом создаются папки по дате, куда по scp копируются файлы бэкапов из микротика, а потом удаляются на самом устройстве.

Делается два бэкапа: бинарный и текстовый.

UPD. В процессе эксплуатации скрипта, столкнулся однажды с его неработоспособностью, бэкапы перестали делаться: через ps aux видел висящую команду скрипта на этапе:

cmd_backup=”/export file=${r}”
ssh ${login}@$r -i $privatekey “${cmd_backup}” > /dev/null

Проблема была на самом микротике: зависает экспорт файла бэкапа. Если это сделать вручную, то аналогичная проблема налицо. Ребут роутера решил проблему.

Понравилась статья? Поделиться с друзьями:
Комментарии: 3
  1. Marko

    Hello,

    thank you for a script working almost perfectly :) i wonder if you can somehow put in name of directory backup identity of MikroTik router? I have a lot locations and i can`t always remember them by IP. Also I don`t have any knowledge about scripting :(

    Thank you!

    1. admin (автор)

      Hello, thanks for your comment. Unfortunately, I am not the author of this script, and in this article just my version of using this script for my purposes.

  2. Егор

    Группа Full и правда – лишнее.
    Но чтения, записи и ssh недостаточно, у меня заработало только вот в таком виде:

    policy=ssh,ftp,read,write,policy,test,sensitive остальные – не нужно

Добавить комментарий для rmn-lux Отменить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: