Как стать автором
Обновить

Скрипт для централизованного резервного копирования конфигураций маршрутизаторов Mikrotik на Powershell

Время на прочтение 3 мин
Количество просмотров 8.6K
После обрастания инфраструктуры большим количеством маршрутизаторов данного производителя встал вопрос бэкапах конфигурации в одно хранилище. Попадались решения скриптов исполняемых на роутерах с выгрузкой на фтп, но это несколько неудобно, т.к. требует настройки скриптов на всех роутерах идентично.

Решил сделать подобное централизовано путем запуска резервного копирования на роутере командой по 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 в подкаталог с датой запуска скрипта. Сами бэкапы именуются по адресу маршрутизатора.

Возможно, кому-то пригодится.

upd.
вторая версия без использования промежуточных файлов


#зададим политику сразу, чтобы не вспминать команду при переносе 
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 ("Ваш_логин_к_роутеру+ct", $secpasswd)
  $error.clear()

$Cdate=get-date -Uformat %Y%m%d
  $rptpath = "$curDir\backup\$cdate"

  #Создание каталога по дате
  if (!(test-path -path $rptpath)) {new-item -path $rptpath -itemtype directory}

  #скачивание файла
  

#Подключение по ssh и отправка команды резервного копирования
  $sshsession=New-SSHSession -ComputerName $ipaddr -Credential $mycreds -Force 
  $ssh = $sshSession | New-SSHShellStream
	start-sleep -s 5
  $ssh.read() | out-null

    $ssh.WriteLine( "export" )
	start-sleep -s 15
	$ssh.read() | sc "$rptpath\$ipaddr.backup"
	$tfileproc=gc "$rptpath\$ipaddr.backup"
	$tfileproc[2..($tfileproc.count-2)]|sc "$rptpath\$ipaddr.backup"
  
  
  Get-SSHSession | Remove-SshSession;
  
  #вывод ошибок в файл журнала 
  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()
	}
} 

Теги:
Хабы:
+6
Комментарии 11
Комментарии Комментарии 11

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн