Собираем конфигурационную информацию по SSH посредством PowerShell


Опубликовано 25.03.2019 13:31 | Автор: Admin

В данной статье рассматривается:

У вас возникла необходимость собирать конфигурацию с множества Cisco подобных устройств? Предлагаю к рассмотрению мою реализацию сбора конфигураций по SSH посредством PowerShell.




У вас возникла необходимость собирать конфигурацию с множества Cisco подобных устройств? Предлагаю к рассмотрению мою реализацию сбора конфигураций по SSH посредством PowerShell.

Для начала нам необходимо установить модуль Posh-SSH реализующий поддержку протоколов SSH, SFTP, SCP в PowerShell.

Установка модуля
Find-Module Posh-SSH | Install-Module

Подробно о установке можно почитать на просторах Интернета. К примеру Модуль Posh-SSH простой доступ к SSH и SCP из PowerShell

TFTP сервер

Так же для работы нам понадобиться поднятый сервер 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
}

}

Скрипты писались на скорую руку, но полностью рабочий, минимален по функционалу так, что есть большое поле для творчества..


Метки
Windows SSH PowerShell Скрипт Заметка

Комментариев: 2

 118 |

 Osu
 06.09.2023 12:15

А как же с паролем для enable?

 Admin
 06.09.2023 12:19

$SSH.WriteLine("enable");
Start-Sleep -Seconds 1
$SSH.WriteLine("пароль");


Добавить комментарий:
Google
Yandex
Отправить