netmiko とは
netmiko とは、ネットワーク機器にSSHでログインして操作するのを助けてくれるPythonのライブラリです。現在Cisco IOS、Juniper JunOS、Palo Alto PAN-OSなどに対応しています。ログイン、コンフィグモード移行、ログアウトなどがメソッドとして抽象化されていて、個別のコマンドは直接コマンドを指定するタイプのライブラリです。この点ではNAPALMより抽象度は低いです。 pip intall netmiko
等でインストール可能です。
ktbyers/netmiko: Multi-vendor library to simplify Paramiko SSH connections to network devices
自動検出機能
netmikoでは通常、コネクションオブジェクトを生成する際に、 device_type
というパラメータを設定する必要があり、Cisco IOSであれば、"cisco_ios" のように指定していました。
remote_device = {'device_type': 'cisco_ios',
'host': '192.168.0.254',
'username': 'user',
'password': 'passwordpassword'}
最近リリースされた version 1.3.0 では「 SSH autodetect」というdevice_type
を自動検出する機能が追加されました。
auto_detect.py を読む限り、自動検出できる機種は本来netmikoがサポートしている機種よりも限られているようですが、今回はひとまずCisco IOSを検出できるか確かめてみました。
(ほとんど上記ソース内のコメントにある例そのままです)
コード例
from netmiko.ssh_autodetect import SSHDetect
from netmiko.ssh_dispatcher import ConnectHandler
# パラメータの設定 device_typeはここでは autodetect にしておく
remote_device = {'device_type': 'autodetect',
'host': '192.168.0.254',
'username': 'user',
'password': 'passwordpassword'}
# 自動検出
guesser = SSHDetect(**remote_device)
best_match = guesser.autodetect()
# 検出結果のデバッグ出力
print("device_type: " + best_match)
# 自動検出した device_type を再設定する
remote_device['device_type'] = best_match
connection = ConnectHandler(**remote_device)
# コマンド実行結果の出力
print(connection.send_command('show version'))
# 切断
connection.disconnect()
出力例
device_type: cisco_ios ←検出したdevice_type
Cisco IOS Software, C181X Software (C181X-ADVENTERPRISEK9-M), Version 15.1(4)M4, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2012 by Cisco Systems, Inc.
Compiled Tue 20-Mar-12 23:34 by prod_rel_team
~略~
-------------------------------------------------
Device# PID SN
-------------------------------------------------
*0 CISCO1812-J/K9 ***********
Configuration register is 0x2102
自動検出がうまくいき、無事に show version の結果も表示されました。
参考
- netmiko の一般的なチュートリアル