netmikoを使ってネットワークデバイスを制御する

netmikoとparamikoの違い

netmikoとparamikoは、どちらもPythonでネットワークデバイスを操作するためのモジュールですが、netmikoの方がよりネットワークデバイスに対する操作を簡単に行えるようになっています。

netmikoとparamikoの違いは次の通りです。

netmikoの特徴

  • ネットワークデバイスに対する操作を簡単に行えるようになっている
  • 複数のデバイスを同時に操作できる
  • 自動化のために使用することができる
  • デバイスによって異なるコマンドを使用する場合、自動的に判別してコマンドを使用する

paramikoの特徴

  • SSH プロトコルを使ってデバイスに接続することができる
  • SCP プロトコルを使ってデバイスからファイルを転送することができる
  • SFTP プロトコルを使ってデバイスのファイルを操作することができる

netmikoとparamikoの主な違いは、netmiko はネットワークデバイスを操作するためのモジュールであるのに対し、paramiko は SSH プロトコルを使ってデバイスに接続するためのモジュールであるという点です。 netmiko を使えば、簡単にネットワークデバイスを操作することができますが、paramiko であればネットワークデバイスに限らず、SSH プロトコルを使ってデバイスに接続することができます。どちらのモジュールを使うかは、ニーズに応じて選択しましょう。

netmiko を使ったネットワークデバイス制御例

具体的なコマンドラインを使って netmiko を使ってネットワークデバイスを制御する例を見ていきましょう。 まず、Python プログラムから netmiko モジュールをインポートします。

from netmiko import ConnectHandler

次に、接続するデバイスの接続情報を辞書型で用意します。

device = { 'device_type': 'cisco_ios', 'ip': '192.168.1.1', 'username': 'admin', 'password': 'password', }

'device_type' キーには、接続するデバイスの種類を指定します。 'device_type' には、以下のような値を指定することができます。

  • cisco_ios: Cisco IOS デバイス
  • cisco_xr: Cisco XR デバイス
  • cisco_asa: Cisco ASA ファイアウォール
  • juniper: Juniper デバイス
  • juniper_junos: Juniper Junos デバイス

'ip' キーには、接続するデバイスの IP アドレスを、'username' キーには、接続するデバイスのユーザ名を、'password' キーには、接続するデバイスのパスワードを指定します。

続いて、ConnectHandler 関数を使って、指定したデバイスに接続します。

ssh = ConnectHandler(**device)

ここで、ConnectHandler 関数には、device 変数を展開して渡しています。 これにより、device 変数に格納された接続情報が、ConnectHandler 関数の引数として渡されます。

接続した後は、ssh 変数に格納されたオブジェクトから、netmiko モジュールの機能を使って、デバイスに対してコマンドを実行します。

例えば、以下のように、send_command メソッドを使って、デバイスに対してコマンドを実行できます。

output = ssh.send_command('show version') print(output)

send_command メソッドには、実行するコマンドを文字列で渡します。send_command メソッドは、指定したコマンドを実行し、その結果を文字列で返します。 send_command メソッドの返り値を output 変数に格納し、print 関数で出力することで、デバイスからのコマンド実行結果を表示することができます。

また、以下のように、send_config_set メソッドを使って、デバイスの設定を変更することもできます。

output = ssh.send_config_set(['interface GigabitEthernet0/1', 'description Configured by Python']) print(output)

send_config_set メソッドには、設定を行うコマンドのリストを渡します。

最後に、接続したデバイスを切断します。

ssh.disconnect()

その他にも、netmiko モジュールには、便利な機能がたくさんあります。

例えば、以下のような機能があります。

  • send_command_expect: コマンドを実行し、特定の文字列が出力されるまで待つ
  • send_config_from_file: ファイルから設定を読み込んで、デバイスに適用する
  • send_config_commands: 複数のコマンドをまとめて実行する
  • save_config: デバイスの設定を保存する

これらの機能を使うことで、より複雑で細かい操作を行うことができます。 詳細なドキュメントはGitHubを確認してみてください。

ここまで解説してきたスクリプトをまとめると次のようになります。

from netmiko import ConnectHandler # デバイスの接続情報を設定 device = { 'device_type': 'cisco_ios', 'ip': '192.168.1.1', 'username': 'admin', 'password': 'password', } # デバイスに接続 ssh = ConnectHandler(**device) # show version コマンドを実行 output = ssh.send_command('show version') print(output) # interface GigabitEthernet0/1 の description を変更 output = ssh.send_config_set(['interface GigabitEthernet0/1', 'description Configured by Python']) print(output) # デバイスを切断 ssh.disconnect()

実行結果は次の通り。

Cisco IOS Software, C2960X Software (C2960X-UNIVERSALK9-M), Version 15.2(2)E5, RELEASE SOFTWARE (fc3) Technical Support: http://www.cisco.com/techsupport Copyright (c) 1986-2014 by Cisco Systems, Inc. Compiled Wed 10-Dec-14 21:25 by prod_rel_team ROM: Bootstrap program is C2960X boot loader BOOTLDR: C2960X Boot Loader (C2960X-HBOOT-M) Version 15.2(2r)EX5, RELEASE SOFTWARE (fc1) switch uptime is 1 hour, 29 minutes System returned to ROM by power-on System image file is "flash:/c2960x-universalk9-mz.152-2.E5.bin" This product contains cryptographic features and is subject to United States and local country laws governing import, export, transfer and use. Delivery of Cisco cryptographic products does not imply third-party authority to import, export, distribute or use encryption. Importers, exporters, distributors and users are responsible for compliance with U.S. and local country laws. By using this product you agree to comply with applicable laws and regulations. If you are unable to comply with U.S. and local laws, return this product immediately. A summary of U.S. laws governing Cisco cryptographic products may be found at: http://www.cisco.com/wwl/export/crypto/tool/stqrg.html If you require further assistance please contact us by sending email to export@cisco.com. Cisco WS-C2960X-24PS-L (PowerPC405) processor (revision C0) with 118784K/12288K bytes of memory. Processor board ID FCZ1944W0K6 Last reset from power-on 3 Gigabit Ethernet interfaces 1 terminal line 1 Virtual Private Network (VPN) Module 32K bytes of non-volatile configuration memory. Configuration register is 0xF interface GigabitEthernet0/1 Configured by Python interface GigabitEthernet0/1 description Configured by Python

最初に show version コマンドを実行し、その結果が出力されたあとに、interface GigabitEthernet0/1に対してdescriptionを設定しています。

関連記事

メールマガジン

ネットワ-ク初心者のみなさま。
ネットワークの基礎知識を疎かにすることは
大変危険です!!

「初心者にも理解できるネットワーク技術」

これを読めばネットワークの基礎が分かる!!
ネットワーク関連の仕事に就きたいとお考えの学生の方や、ネットワークに興味があって転職を考えている社会人の方、まずは登録してみてください。

もちろん無料です!!

↓メールマガジン購読はこちら↓

メールアドレス: