LoginSignup
31
33

More than 5 years have passed since last update.

netmikoでネットワーク機器の種類を自動検出してコマンドを実行する

Posted at

netmiko とは

netmiko とは、ネットワーク機器にSSHでログインして操作するのを助けてくれるPythonのライブラリです。現在Cisco IOS、Juniper JunOS、Palo Alto PAN-OSなどに対応しています。ログイン、コンフィグモード移行、ログアウトなどがメソッドとして抽象化されていて、個別のコマンドは直接コマンドを指定するタイプのライブラリです。この点ではNAPALMより抽象度は低いです。 pip intall netmiko 等でインストール可能です。

自動検出機能

netmikoでは通常、コネクションオブジェクトを生成する際に、 device_type というパラメータを設定する必要があり、Cisco IOSであれば、"cisco_ios" のように指定していました。

device_typeを明示的に指定する場合
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 の結果も表示されました。

参考

31
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
33