Рейтинг статьи: 2.400/5 (5 голосов).
Это третья статья о резервном копировании файлов конфигурации Cisco. Соединение с оборудованием происходит по ssh, поэтому этот метод можно использовать и по открытым сетям, не волнуясь о перехвате трафика. Используется скрипт на PowerShellСпонсор этой страницы:
Этот вариант резервирования файлов можно рассматривать как один из инструментов, который в дальнейшем можно использовать и для других целей.
Используется PowerShell. (Входит с состав windows 7 и выше. На Windows XP необходимо устанавливать отдельно)
Подготовительная работа
Список сетевого оборудования cisco решил хранить в "ini" файле, и использовать его в дальнейшем для других скриптов.
cisco.ini
[192.168.1.1] [192.168.52.1] [192.168.73.1]
На оборудовании cisco создаем пользователя для примера backup с паролем b@ckUpPa$$ с 15 привилегией.
создаем , который будет запускать скрипт с именем .\config.ps1
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoProfile powershell .\config.ps1
Для работы по протоколу SSH понадобится Renci.SshNet.dll
https://sshnet.codeplex.com/
Скрипт для копирования
.\config.ps1
# Load SSH library (for .NET 4.0 and PowerShell 3) $DllPath = ".\Renci.SshNet.dll" [void][reflection.assembly]::LoadFrom( (Resolve-Path $DllPath) ) #Функция чтения INI файла в массив Function Get-IniContent { [CmdletBinding()] Param( [ValidateNotNullOrEmpty()] [ValidateScript({(Test-Path $_) -and ((Get-Item $_).Extension -eq ".ini")})] [Parameter(ValueFromPipeline=$True,Mandatory=$True)] [string]$FilePath ) Begin {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function started"} Process { Write-Verbose "$($MyInvocation.MyCommand.Name):: Processing file: $Filepath" $ini = @{} switch -regex -file $FilePath { "^\[(.+)\]$" # Section { $section = $matches[1] $ini[$section] = @{} $CommentCount = 0 } "^(;.*)$" # Comment { if (!($section)) { $section = "No-Section" $ini[$section] = @{} } $value = $matches[1] $CommentCount = $CommentCount + 1 $name = "Comment" + $CommentCount $ini[$section][$name] = $value } "(.+?)\s*=\s*(.*)" # Key { if (!($section)) { $section = "No-Section" $ini[$section] = @{} } $name,$value = $matches[1..2] $ini[$section][$name] = $value } } Write-Verbose "$($MyInvocation.MyCommand.Name):: Finished Processing file: $FilePath" Return $ini } End {Write-Verbose "$($MyInvocation.MyCommand.Name):: Function ended"} } $FileContent = Get-IniContent ".\cisco.ini" $date = Get-Date -Format "yyyy-MM-dd" $outDir = ".\config\" + $date #$FileContent.Keys | % { "key = $_ , value = " + $FileContent.Item($_) } New-Item -ItemType directory -Path ".\config" New-Item -ItemType directory -Path $outDir foreach ($h in $FileContent.GetEnumerator()) { #Читаем в цикле секции являющиеся адресом устройства $ciscohost=$($h.Name) Write-Host $ciscohost $ports=$($h.Value) $SshClient = New-Object Renci.SshNet.SshClient($ciscohost, 22, 'backup', 'b@ckUpPa$$') $SshClient.Connect() if ($SshClient.isconnected) { $SshCommand = $SshClient.RunCommand("sh run") $outFile=$outDir + "\" + $ciscohost + ".config" Out-File -FilePath $outFile -InputObject $SshCommand.Result -encoding unicode $SshCommand.Dispose() $SshClient.Disconnect() $SshClient.Dispose() } }
Результат скрипта для копирования
В результате должна появится папка config, в ней папка с текущей датой, а в ней файлы конфигураций.
Удачи в использовании новых инструментов.
Cisco Systems Backup Программирование PowerShell
Комментариев нет. Станьте первым!