Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
31
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

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

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 の結果も表示されました。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
31
Help us understand the problem. What are the problem?