Централизованное резервное копирования Mikrotik через PowerShell
В виду того, что на нынешнем месте работы ресурсов для теста и введения боевого сервера попросту нет, а те что использовались под VM
с осью Ubuntu 18.04.5 Server
где крутится скрипт по выполнению резервного копирования конфигурацию маршрутизаторов Mikrotik
через bash
нужны другому проекту. А значит настает пора, да и есть свободное время дабы перенести скрипт на PowerShell
и выполнять его с любой Windows
системы.
Т.к. у меня дома несколько Mikrotik
’ов то скрипт успешно было оттестирован на моих:
Ekzhome: Mikrotik RB2011UiAS-2HnD (mipsbe) v6.47
Ekzhome1: Mikrotik hAP ac^2 (arm) v6.47
Ekzhome2: Mikrotik CRS326-24G-2S+ (arm) v6.47.3
На всех моих Mikrotik
используется одна учетная запись
На заметку: Скрипт запускаю в консоли PowerShell
которая запущена через "Run as administrator"
Шаг №1:
На системе Windows Server 2012 R2 Std
устанавливаю редактор notepad++
и создаю в корне диска C:
каталога script
где размещаю скрипт на PowerShell:
Шаг №2:
Скрипт для единичного бекапирования Mikrotik
: bmikrotikone
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | Set-Executionpolicy unrestricted#Check if out module loadedif (Get-Module -ListAvailable -Name Posh-SSH) { <# do nothing #> }else { Install-Module Posh-SSH} #Каталог расположения бекапов$Letter_Drive = “C:”$BackupFolder = “backup”$BackupPath = $Letter_Drive + “\” + $BackupFolder #Функция для создания структуры каталоговFunction CheckPath ($Path) { $Path_Exists = Test-Path -Path $Path If ($Path_Exists -eq $False) { New-Item $Path -Type directory }} #Создаем каталог для бекаповCheckPath $BackupPath | Out-Null #Передайте нежелательные результаты команд / вызовов функций#в вызываемой функции через “… | Out-Null”, #а затем просто верните нужную вещь. write-host $BackupPath #Импортирую установленный модульImport-Module Posh-SSH $username = “username”$password = “password”$hostname = “ipaddress”$Port = “22”$fnamebackup = “backup_$(Get-Date -Format HH_mm_dd_MM_yyyy)”$fnamersc = “backup_$(Get-Date -Format HH_mm_dd_MM_yyyy)” $secpassword = ConvertTo-SecureString -String $password -AsPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential ($username, $secpassword) $ssh = New-SSHSession $hostname -AcceptKey -Credential $Cred -ErrorAction Stop -Port 22$outbackup = (Invoke-SSHCommand $ssh -Command “/system backup save name=$fnamebackup dont-encrypt=yes” -EnsureConnection).Output$outrsc = (Invoke-SSHCommand $ssh -Command “export file=$fnamersc” -EnsureConnection).Output #set name mikrotik$mikrotikname = (Invoke-SSHCommand $ssh -Command “/system identity print” -EnsureConnection).Output #Форматируем значение переменной $mikrotikname$fa = $mikrotikname | out-file $BackupPath\name.txt$fb = Get-Content $BackupPath\name.txt -first 1$fc = $fb.Split(“: “)[-1]$fc #Создаем внутри каталога C:\backup каталог с именем Mikrotik,#ключ Force обязателен, т.к. каталог уже есть и каждый последующий день будет тут же$MName = new-item -Path $BackupPath\$fc -Type Directory -Force$MName #Делаем бекапы backup и бекап конфигурации rsc и через ftp забираем их на каталог c:\backup\<mikrotik_name>#А после удаляем с Mikrotikif($outbackup.Trim() -eq “Configuration backup saved”){ $sftp = New-SFTPSession $hostname -AcceptKey -Credential $Cred Get-SFTPFile -SFTPSession $sftp -RemoteFile “/$fnamebackup.backup” -LocalPath “$MName\” -Overwrite Get-SFTPFile -SFTPSession $sftp -RemoteFile “/$fnamersc.rsc” -LocalPath “$MName\” -Overwrite Start-Sleep 2 Remove-SFTPItem -SFTPSession $sftp -Path “/$fnamebackup.backup” -Force Remove-SFTPItem -SFTPSession $sftp -Path “/$fnamersc.rsc” -Force Remove-SFTPSession $sftp }Remove-SSHSession $ssh |
Шаг №3:
Скрипт для массового бекапирования Mikrotik
‘ов: bmikrotikmore
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | Set-Executionpolicy unrestricted #Check if out module loadedif (Get-Module -ListAvailable -Name Posh-SSH) { <# do nothing #> }else { Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force -Confirm Install-Module Posh-SSH} #Текущая дата$CurrentDate = get-date -format dd.MM.yyyy #Каталог расположения бекапов$Letter_Drive = “C:”$BackupFolder = “backup”$BackupPath = $Letter_Drive + “\” + $BackupFolder #Функция для создания структуры каталоговFunction CheckPath ($Path) { $Path_Exists = Test-Path -Path $Path If ($Path_Exists -eq $False) { New-Item $Path -Type directory }} #Создаем каталог для бекаповCheckPath $BackupPath | Out-Null #Передайте нежелательные результаты команд / вызовов функций#в вызываемой функции через “… | Out-Null”, #а затем просто верните нужную вещь. write-host $BackupPath #Импортирую установленный модульImport-Module Posh-SSH $username = “username”$password = “password”$Port = “22”#$fnamebackup = “backup_$(Get-Date -Format ddMMyyyy)”#$fnamersc = “backup_$(Get-Date -Format ddMMyyyy)”$fnamebackup = “backup_$(Get-Date -Format HH_mm_dd_MM_yyyy)”$fnamersc = “backup_$(Get-Date -Format HH_mm_dd_MM_yyyy)” function bkprtr {param($ipaddr)$secpassword = ConvertTo-SecureString -String $password -AsPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential ($username, $secpassword) $ssh = New-SSHSession $ipaddr -AcceptKey -Credential $Cred -ErrorAction Stop -Port 22$outbackup = (Invoke-SSHCommand $ssh -Command “/system backup save name=$fnamebackup dont-encrypt=yes” -EnsureConnection).Output$outrsc = (Invoke-SSHCommand $ssh -Command “export file=$fnamersc” -EnsureConnection).Output #set name mikrotik$mikrotikname = (Invoke-SSHCommand $ssh -Command “/system identity print” -EnsureConnection).Output #Форматируем значение переменной $mikrotikname$fa = $mikrotikname | out-file $BackupPath\name.txt$fb = Get-Content $BackupPath\name.txt -first 1$fc = $fb.Split(“: “)[-1]$fc #Создаем внутри каталога C:\backup каталог с именем Mikrotik,#ключ Force обязателен, т.к. каталог уже есть и каждый последующий день будет тут же$MName = new-item -Path $BackupPath\$fc -Type Directory -Force$MName #Делаем бекапы backup и бекап конфигурации rsc и через ftp забираем их на каталог c:\backup\<mikrotik_name>#А после удаляем с Mikrotikif($outbackup.Trim() -eq “Configuration backup saved”){ $sftp = New-SFTPSession $ipaddr -AcceptKey -Credential $Cred Get-SFTPFile -SFTPSession $sftp -RemoteFile “/$fnamebackup.backup” -LocalPath “$MName\” -Overwrite Get-SFTPFile -SFTPSession $sftp -RemoteFile “/$fnamersc.rsc” -LocalPath “$MName\” -Overwrite Start-Sleep 2 Remove-SFTPItem -SFTPSession $sftp -Path “/$fnamebackup.backup” -Force Remove-SFTPItem -SFTPSession $sftp -Path “/$fnamersc.rsc” -Force Remove-SFTPSession $sftp }Remove-SSHSession $ssh}foreach ($ip in gc C:\script\list.txt) {bkprtr($ip)} |
А в файл list.txt
директории script
вносим IP
адрес всех Mikrotik'ов
для которых хотим сделать резервную копию.
Результат сделанный бекапов моих микротиков:
Шаг №4:
Итого данный скрипт был перенесен на рабочее окружение где я работаю, и вся сеть у меня строится на базе маршрутизаторов Mikrotik
и он (скрипт) успешно введен в эксплуатацию. К тому же все бекапы у меня хранятся каталоге которые обязательно синхронизируется с персональным облаком на базе Ubuntu 18.04 Server + OwnCloud 10
. Об этом вы можете почитать в заметке «Наработки в OwnCloud + BitLocker на рабочем месте»
На заметку: Первый раз запускаю скрипт из «Шаг №2
» придется согласиться с
Для продолжения требуется поставщик NuGet
Для взаимодействия с репозиториями на основе NuGet модулю PowerShellGet требуется версия поставщика NuGet «2.8.5.201»
или более новая. Поставщик NuGet должен быть доступен в «C:\Program Files\PackageManagement\ProviderAssemblies» или
«C:\Users\aolloadm\AppData\Local\PackageManagement\ProviderAssemblies». Поставщик NuGet можно также установить,
выполнив команду «Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force». Вы хотите, чтобы модуль
PowerShellGet установил и импортировал поставщик NuGet прямо сейчас?
[Y] Да — Y [N] Нет — N [S] Приостановить — S [?] Справка (значением по умолчанию является «Y»): Y
Ненадежный репозиторий
Идет установка модулей из ненадежного репозитория. Если вы доверяете этому репозиторию, измените его значение
InstallationPolicy, запустив командлет Set-PSRepository. Вы действительно хотите установить модули из «PSGallery»?
[Y] Да — Y [A] Да для всех — A [N] Нет — N [L] Нет для всех — L [S] Приостановить — S [?] Справка
(значением по умолчанию является «N»):Y
Ну а далее скрипт успешно отработает и будем мне счастье.
На этом моя задача завершена, у меня есть самолично написанная наработка по централизованному резервному копированию маршрутизаторов Mikrotik
. С уважением автор блога Олло Александр aka ekzorchik.