Модуль Posh-SSH простий доступ до SSH і SCP з PowerShell

для 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
  • переходимо в режим конфігурації інтерфейсу
  • ресетим інтерфейс
Приклад роботи з комутатором по SSH
$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)

» Офіційна сторінка від творця модуля

Корисні посилання: раз, два.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.