Powershell

PowerShellでSSH接続してコマンドを実行する【パスワード対応】

Powershell

以前にPythonを利用してスイッチ機器の設定情報を取得したことがあります。

PythonでCiscoスイッチのInterface情報をSQLへ一括インポートする【Netmiko+Pandas】
https://syachiku.net/python_cisco_netmiko/

今回はPythonではなくPowerShellを使って同じようにSSH接続ができるか試してみました。
クライアント証明書を利用して、パスワード入力を省略する方法であればすぐに見つかったのですが、接続時にパスワードを入力する方法がなかなか見つからなかったのでメモとして残します

1. Posh-SSHモジュール

Windows10ではSSHクライアントも標準でインストールされているのですが、先ほどのパスワード入力部分がクリアできません。
そのため、今回は PowerShell から SSH/SFTP/SCP が使えるモジュールの「Posh-SSH」を利用します。

GitHub - darkoperator/Posh-SSH: PowerShell Module for automating tasks on remote systems using SSH
PowerShell Module for automating tasks on remote systems using SSH - darkoperator/Posh-SSH

2. Posh-SSHモジュールのインストール

Posh-SSHモジュールのインストールを行います。
管理者でPowerShellを立ち上げてInstallします。

> Install-Module Posh-SSH

3. SSH接続を試す

では実際にSSH接続できるか試してみましょう。
以下のサンプルスクリプトを用意して試します。

TargetIPやTargetIPやPASSWDなどは適宜変更してください。

$TargetIP = "192.168.1.1"
$PASSWD = "password"
$USER = "cisco"
$COMMAND = "show intarface status"

# 資格情報の作成
$SecPasswd = ConvertTo-SecureString $PASSWD -AsPlainText -Force
$Credentials = New-Object System.Management.AUtomation.PSCredential($USER, $SecPasswd)

# SSH接続の実施
$SessionID = New-SSHSession -ComputerName $TargetIP -Credentials $Credentials 
# コマンド実行
$Response = Invoke-SSHCommand -Index $SessionID.sessionid -Command $COMMAND

Write-host ([string]$Response.Output)

今回のサンプルはCiscoのスイッチを想定していますが、パラメータやコマンドを変更すればLinuxサーバなどでも利用できると思います。

PowerShellの学習におすすめの書籍

PowerShellクックブック [オライリー]

私も実際に持っていますが、間違いなくこの本はオススメできます。オライリーシリーズなので定評があるというだけでなく,実際に良書だと思います。

オライリー社の書籍というと初心者にはとっつきにくイメージがありますが、この書籍に掲載されている例は基本的なものが多く,入門者が使い方を覚えるためには丁度よいレベルの本だと感じます。

今回は以上となります。

コメント