для powershell есть модуль Posh-SSH реализующий поддержку протоколов SSH, SFTP, SCP в PowerShell. Здесь описывается как установить, и базовые заметки по работе. По сути это выжимка из англоязычных статьи приведенной ниже.
по определенному событию понадобилось сбрасывать сетевой порт на коммутаторе. Коммутатор имеет command line интерфейс cisco. Перед тем как использовать из командной строки putty было решено посмотреть существуют ли модули для работы по ssh напрямую из powershell. Поиски дали модуль Posh-SSH на github.
модуль позволяет:
- устанавливать сессии SSH и SFTP по кредиталам или используя OpenSSH ключ
- подключаться через SOCKS и HTTP прокси для обоих видов SSH и SFTP сессий
- исполнять команды по одиночке посылая их в SSH
- загружать и скачивать файлы использую SCP и SFTP протоколы
Для SSH поддерживается аутентификация по ключу, логину\паролю, ввод с клавиатуры. Поддерживаются разные алгоритмы шифрования, поддерживаются прокси
Минимальные требования PowerShell 3.0 и .NET 4.0
описание модуля на официальной страничке
установка
простейший способ установки из админской консоли запустить команду:
iex (New-Object Net.WebClient).DownloadString("https://gist.github.com/darkoperator/6152630/raw/c67de4f7cd780ba367cccbc2593f38d18ce6df89/instposhsshdev")
если у вас стоит PowerShell 5
Find-Module Posh-SSH | Install-Module
просмотреть команды в модуле можно так:
Get-Command -Module Posh-SSH
Как работать с SSH
1. Сначала создаем SSH сессию
Import-Module Posh-SSH $SSHSession = New-SSHSession -ComputerName 192.168.1.1 -Credential $(Get-Credential) -Verbose
При первом подключении модуль спросит добавить ли удаленный хост в список доверенных. Можно сделать один раз запуск New-SSHSession из консоли и нажать Y. В последующем подключаться будет без вопросов.
- Get-SSHTrustedHost
- Get-SSHSession
- Remove-SSHSession
2. создаем шелл
$SSH = $SSHSession | New-SSHShellStream
все, теперь можно посылать команды и считывать ответ
# отправляет команду $SSH.WriteLine( "enable" ) # считываем ответ $SSH.read()
3. Завершение работы
$sshSession | Remove-SSHSession
просмотреть сессии можно командой Get-SSHSession
ниже пример работы:
- подключаемся по SSH
- переходим в enable режим
- переходим в режим конфигурации интерфейса
- ресетим интерфейс
$SwitchIP = '10.10.3.2' $SwitchPort = 4 $Cred = Get-Credential admin $SSHSession = New-SSHSession -ComputerName $SwitchIP -Credential $Cred -Verbose if ($($sshSession.Connected) -eq $true) { Write-Host "SSH session opened" -ForegroundColor Green Write-Host " " Write-Host " open shell" -ForegroundColor Green ### сессия открыта успешно, начинаем сброс порта $ssh = $sshSession | New-SSHShellStream Start-Sleep -Seconds 1 # ресетим интерфейс $ssh.read() Start-Sleep -Seconds 1 $ssh.WriteLine( "enable" ) $ssh.read() Write-Host " переходим в привелигированный режим" -ForegroundColor Green Start-Sleep -Seconds 1 $ssh.WriteLine( "password" ) $ssh.read() Write-Host " вводим пароль" -ForegroundColor Green Start-Sleep -Seconds 1 $ssh.WriteLine( "configure" ) $ssh.read() Write-Host " переходим в режим конфигурации" -ForegroundColor Green Start-Sleep -Seconds 1 $ssh.WriteLine( "interface gigabitEthernet 1/0/$SwitchPort" ) $ssh.read() Write-Host " переходим к конфигурации интерфейса interface gigabitEthernet 1/0/$SwitchPort" -ForegroundColor Green Start-Sleep -Seconds 1 $ssh.WriteLine( "shutdown" ) $ssh.read() Write-Host " отключаем интерфейс" -ForegroundColor Green Start-Sleep -Seconds 3 $ssh.WriteLine( "no shutdown" ) $ssh.read() Write-Host " включаем интерфейс" -ForegroundColor Green Write-Host " отработали, завершаемся" -ForegroundColor Green } else { Write-Host "SSH session cannot be established" -ForegroundColor Red Write-Host "script terminate" -ForegroundColor Red exit } if ( $($sshSession | Remove-SSHSession) -eq $true) { Write-Host "SSH session closed" -ForegroundColor Green } else{ Write-Host "SSH session NOT closed" -ForegroundColor Red Write-Host "please check manual" -ForegroundColor Red Get-SSHSession }
как видно из примера можно получать обратно вывод консоли и парсить при необходимости
метода отправки 2 — Write и WriteLine первый печатает в консоль, второй соответсвенно печатает и нажимает Enter
предача файлов по SCP
тут все еще проще. привожу пример с официальной страницы
закачка файла
Set-SCPFile -LocalFile .\Downloads\VMware-PowerCLI-5.5.0-1671586.exe -RemoteFile "/tmp/powercliinstaller.exe" -ComputerName 192.168.10.3 -Credential (Get-Credential root)
скачивание файла
Get-SCPFile -LocalFile .\Downloads\VMware-PowerCLI.exe -RemoteFile "/tmp/powercliinstaller.exe" -ComputerName 192.168.10.3 -Credential (Get-Credential root)
официальная страничка от создателя модуля
www.powershellmagazine.com/2014/07/03/posh-ssh-open-source-ssh-powershell-module
полезные ссылки
www.powershelladmin.com/wiki/SSH_from_PowerShell_using_the_SSH.NET_library
blogs.msdn.microsoft.com/powershell/2015/06/03/looking-forward-microsoft-support-for-secure-shell-ssh
ссылка на оригинал статьи https://habrahabr.ru/post/314990/
Добавить комментарий