たそ@ITインフラ初心者

taso@初心者エンジニア

新卒2年目 エンジニアが適当に語るブログてす

Windowsでnetmikoを使ってみた

はじめに

こんにちは たそ(@taso_int)です。
応用情報お疲れ様でした。午後の手ごたえはありましたが、午前がボロボロかも
落ちても次リベンジします。
今日はWindows環境でnetmikoを使いCiscoのSandbox上へコマンドを実行します。

netmikoとは

SSH接続を行い、コマンド操作を行うPythonライブラリの1つです。
メリットとしては多くのベンダーに対応しており、シンプルであることが挙げられます。

github.com

Windowsでvenv環境を作成する

Windowsでnetmikoを使うにはvenvを使うのが一番手っ取り早いと思います。
venvの作成

python -m venv venv

venvのアクティベート

.venv\Scripts\activate.ps1

セキュリティエラーが出る場合は管理者権限でpowerShellを実行し、
以下のコマンドを実行し、スクリプトの実行を許可する(初回のみ)

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

pipのアップグレードおよびnetmikoのインストール

pip install --upgrade pip
pip install netmiko

これで実行環境が完成しました。
実際にコードを試してみましょう。

実行コード

from netmiko import ConnectHandler

cisco_sandbox = {
    'device_type': 'cisco_ios',
    'host': 'sandbox-iosxe-latest-1.cisco.com',
    'username': 'developer',
    'password': 'C1sco12345'
}

net_connect = ConnectHandler(**cisco_sandbox)
output = net_connect.send_command('show ip int brief')
print (output)

config_commands = ['int loop 20', 'ip address 20.20.20.20 255.255.255.0']
output = net_connect.send_config_set(config_commands)
print (output)

output = net_connect.send_command('show ip int brief')
print (output)

何をしているかというと初めにshow ip int briefを実行し、
その後Loopbackインタフェースを作成、show ip int briefを再実行しています。

コード解説

軽いコード解説をしたいと思います。

cisco_sandbox = {
    'device_type': 'cisco_ios',
    'host': 'sandbox-iosxe-latest-1.cisco.com',
    'username': 'developer',
    'password': 'C1sco12345'
}

net_connect = ConnectHandler(**cisco_sandbox)

接続するデバイスを辞書形式で記述しています。
ちなみに今回は1つの機器しか記述していないですが、
複数の機器を書くことが可能です。
device_typeには対応するものを記述することになってます。
接続するSandboxはこちら(誰でも使えます。)

https://devnetsandbox.cisco.com/RM/Diagram/Index/7b4d4209-a17c-4bc3-9b38-f15184e53a94?diagramType=Topology

この辞書を渡すことによってSSH接続を確立しています。

output = net_connect.send_command('show ip int brief')
print (output)

config_commands = ['int loop 20', 'ip address 20.20.20.20 255.255.255.0']
output = net_connect.send_config_set(config_commands)
print (output)

output = net_connect.send_command('show ip int brief')
print (output)

コマンドを流してその結果をprintを使って表示します。
netmikoはtelnetlib(telent経由で操作する)とは違い
自動的に構成モードに入ることができます。

実行結果

それでは実行してみましょう。
f:id:taso_int:20211016122251p:plain

最後に

初めて触りましたが、コマンドをリストで定義しているのが新鮮でした。
今回はWindows環境と誰でも使える機器を利用しているので自動化の初歩としてやるのはありかも…