для powershell есть модуль Posh-SSH реализующий поддержку протоколов SSH, SFTP, SCP в PowerShell. Здесь описывается как установить, и базовые заметки по работе. По сути это выжимка из англоязычной статьи приведенной ниже.
по определенному событию понадобилось сбрасывать сетевой порт на коммутаторе. Коммутатор имеет command line интерфейс cisco. Перед тем как использовать из командной строки putty было решено посмотреть существуют ли модули для работы по ssh напрямую из powershell. Поиски дали модуль Posh-SSH на github.
Модуль позволяет:
Для SSH поддерживается аутентификация по ключу, логину\паролю, ввод с клавиатуры. Поддерживаются разные алгоритмы шифрования, поддерживаются прокси
Минимальные требования — PowerShell 3.0 и .NET 4.0. Описание модуля на официальной страничке.
Простейший способ установки из админской консоли запустить команду:
Если у вас стоит PowerShell 5:
Просмотреть команды в модуле можно так:
1. Сначала создаем SSH сессию:
При первом подключении модуль спросит добавить ли удаленный хост в список доверенных. Можно сделать один раз запуск New-SSHSession из консоли и нажать Y. В последующем подключаться будет без вопросов.
2. Создаем шелл:
Все, теперь можно посылать команды и считывать ответ:
3. Завершение работы:
Просмотреть сессии можно командой Get-SSHSession.
Ниже пример работы:
Тут все еще проще. привожу пример с официальной страницы. Закачка файла:
Скачивание файла:
» Официальная страничка от создателя модуля
Полезные ссылки: раз и два.
по определенному событию понадобилось сбрасывать сетевой порт на коммутаторе. Коммутатор имеет 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 режим
- переходим в режим конфигурации интерфейса
- ресетим интерфейс
Пример работы с коммутатором по SSH
Как видно из примера можно получать обратно вывод консоли и парсить при необходимости
метода отправки 2 — Write и WriteLine первый печатает в консоль, второй соответственно печатает и нажимает Enter.
$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)
» Официальная страничка от создателя модуля
Полезные ссылки: раз и два.
Поделиться с друзьями
stoune
Как вариант можете рассмотреть msys/mingw или отдельно, или в составе git-scm (https://git-scm.com/).
Плюсы в том что полноценная оболочка bash, родной ssh клиент, потому проблем с совместимостю не наблюдается.