После обрастания инфраструктуры большим количеством маршрутизаторов данного производителя встал вопрос бэкапах конфигурации в одно хранилище. Попадались решения скриптов исполняемых на роутерах с выгрузкой на фтп, но это несколько неудобно, т.к. требует настройки скриптов на всех роутерах идентично.
Решил сделать подобное централизовано путем запуска резервного копирования на роутере командой по ssh во временный файл temp.backup и загрузки его по фтп.
Список адресов маршрутизаторов list.txt следует положить в каталог скрипта. Бэкапы будут складываться в папку backup в подкаталог с датой запуска скрипта. Сами бэкапы именуются по адресу маршрутизатора.
Возможно, кому-то пригодится.
Решил сделать подобное централизовано путем запуска резервного копирования на роутере командой по ssh во временный файл temp.backup и загрузки его по фтп.
#зададим политику сразу, чтобы не вспминать команду при переносе
Set-ExecutionPolicy remotesigned -scope currentuser
#установка и импорт библиотеки для ssh
Install-Module -Name Posh-SSH
Import-Module posh-ssh
$curDir = $MyInvocation.MyCommand.Definition | split-path -parent
function bkprtr {
param($ipaddr)
#тут указываем логин и пароль к роутерам с правами на ftp и ssh.
$secpasswd = ConvertTo-SecureString "Ваш_пароль_к_роутеру" -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ("Ваш_логин_к_роутеру", $secpasswd)
$error.clear()
#Подключение по ssh и отправка команды резервного копирования
New-SSHSession -ComputerName $ipaddr -Credential $mycreds -Force
Invoke-SshCommand -index 0 -Command "system backup save name temp.backup"
Get-SSHSession | Remove-SshSession;
$Cdate=get-date -Uformat %Y%m%d
$rptpath = "$curDir\backup\$cdate"
#Создание каталога по дате
if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}
#скачивание файла
wget -Uri "ftp://$ipaddr/temp.backup" -OutFile "$rptpath\$ipaddr.backup" -Credential $mycreds
#вывод ошибок в файл журнала
If ($error.count -gt 0) {
get-date | out-file "$curDir\error.log" -append
$ipaddr | out-file "$curDir\error.log" -append
$error | out-file "$curDir\error.log" -append
$error.clear()
}
}
#обрабатываем файл list.txt построчно
foreach ($ip in gc $curDir\list.txt ){bkprtr($ip)}
Список адресов маршрутизаторов list.txt следует положить в каталог скрипта. Бэкапы будут складываться в папку backup в подкаталог с датой запуска скрипта. Сами бэкапы именуются по адресу маршрутизатора.
Возможно, кому-то пригодится.
Комментарии (6)
algerka
16.03.2018 18:14Выполняя постоянно бэкап на флэшку маршрутизтора вы быстро исчерпаете её ресурс.
Evil_Demon Автор
16.03.2018 18:22Черт его знает, старая версия скрипта на bat-файлах у меня с 2015-го года крутилась, все живы) Но если найти возможность делать бэкап на удаленный ресурс, минуя промежуточное сохранение в память маршрутизатора, могло бы получится ещё интереснее.
algerka
16.03.2018 19:37второй существенный минус system backup это отсутствие возможности сравнения версий.
когда один админ, это может и не так надо, а когда много народу, то как контролировать чего творят другие?
altman
Спасибо, надо попробовать, сейчас настраиваю скрипт на каждом микротике отдельно, централизовано немного удобнее
Надо еще дописать подробное логирование со списком ошибок, если вдруг какой-то бэкап не сделался.
Evil_Demon Автор
Здравая мысль, благодарю. Добавил вывод ошибок происшедших в процессе отработки маршрутизатора в файл error.log