Как настроить бэкап 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

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

2 мыслей о “Как настроить бэкап Mikrotik через ssh”

  1. 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. 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *