У вас возникла необходимость собирать конфигурацию с множества Cisco подобных устройств? Предлагаю к рассмотрению мою реализацию сбора конфигураций по SSH посредством PowerShell.
У вас возникла необходимость собирать конфигурацию с множества Cisco подобных устройств? Предлагаю к рассмотрению мою реализацию сбора конфигураций по SSH посредством PowerShell.
Для начала нам необходимо установить модуль Posh-SSH реализующий поддержку протоколов SSH, SFTP, SCP в PowerShell.
Find-Module Posh-SSH | Install-Module
Подробно о установке можно почитать на просторах Интернета. К примеру Модуль Posh-SSH простой доступ к SSH и SCP из PowerShell
Так же для работы нам понадобиться поднятый сервер TFTP. Скачать мы можем его отсюда: tftpd32.jounin.net- очень простой и легкий в освоении TFTP сервер.
Теперь перейдем непосредственно к скриптам. Т.к. сбор мы будем производить с множества устройств, нам необходимо где-то хранить пароли для доступа к устройствам. Хранить их в открытом виде не есть хорошо поэтому предварительно нам необходимо зашифровать их.
Для начала создадим текстовый файл, имеющий следующие столбцы:
Id – некий ИД устройства
name – расширенное название устройства
ip – IP адрес устройства
pass – сам пароль пока, что в открытом виде
Разделитель столбцов знак табуляции.
Пример: list.txt
id name ip pass
5588 Коммутатор в мордере 192.168.0.1 qwerty
Сам скрипт шифрования паролей:
$rez=import-csv "ПУТЬ К ФАЙЛУ" -Delimiter "`t"
#Пример: d:\\list.txt
foreach($dt in $rez)
{
$pass =$dt.pass
$file= "ПУТЬ К КАТАЛОГУ ГДЕ БУДУТ СОЗДАНЫ ФАЙЛЫ С ЗАШИФРОВАННЫМИ ПАРОЛЯМИ"+$dt.id
#Пример: d:\\pass\\
$sec=ConvertTo-SecureString -String $pass -AsPlainText -Force
ConvertFrom-SecureString -SecureString $sec | Set-Content $file
}
После выполнения скрипта, мы имеем каталог, в котором содержаться наши зашифрованные пароли.
Теперь в исходном файле удаляем столбец pass.
Сам скрипт по сбору файлов конфигурации:
При первом запуске будут выскакивать диалоговые окошки, в которых надо нажать «ДА». Имя пользователя для доступа к устройствам в данной реализации у всех одно и тоже, но при необходимости скрипт можно легко модернизировать... Работать надо в среде PowerShell (х86)
clear
Import-Module Posh-SSH
$rez=import-csv "d:\\list.txt" -Delimiter "`t"
foreach($dt in $rez)
{
$file= "d:\\pass\\"+$dt.id
$fileConf= $dt.id+".conf"
Write-Host "Соединение с " $dt.ip "`t" $dt.name -ForegroundColor Green
try{
$password = Get-Content $file | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PSCredential("ИМЯ ПОЛЬЗОВАТЕЛЯ",$password)
$SSHSession = New-SSHSession -ComputerName $dt.ip -Credential $cred -Verbose
if ($($SSHSession.Connected) -eq $true)
{
Write-Host "OK" -ForegroundColor Green
$SSH = $SSHSession | New-SSHShellStream
#необходимо указать нужную команду для вашего оборудования
#либо послать ряд команд, тогда просто продублируйте две нижние команды
$SSH.WriteLine("copy startup-config tftp://IP TFTP СЕРВЕРА/"+$fileConf)
Start-Sleep -Seconds 1
$ss=$SSHSession | Remove-SSHSession
}else
{
Write-Host "Ошибка соединения" -ForegroundColor Red
}
}catch
{
Write-Host "Нет доступа" -ForegroundColor Red
}
}
Скрипты писались на скорую руку, но полностью рабочий, минимален по функционалу так, что есть большое поле для творчества..
А как же с паролем для enable?
$SSH.WriteLine("enable");
Start-Sleep -Seconds 1
$SSH.WriteLine("пароль");