mei_13のPython講座 ロゴ

【Pythonコラム】Pythonでネットワーク機器を自動操作!Netmiko入門




Pythonでネットワーク機器を自動操作!Netmiko入門

ネットワークエンジニアの皆さん、日々の業務でコマンドラインインターフェース(CLI)を使って、たくさんのネットワーク機器の設定や監視を行っていることと思います。しかし、機器の台数が増えれば増えるほど、手作業での設定は時間と労力がかかり、ヒューマンエラーのリスクも高まります。そこで役立つのが、PythonのライブラリであるNetmikoです。

Netmikoは、Cisco、Juniper、Aristaなど、主要なネットワーク機器のCLIへの接続を自動化し、コマンドの実行や設定変更を効率的に行うためのツールです。今回は、Netmikoの基本的な使い方を、初心者の方にもわかりやすく解説します。

Netmikoとは?

Netmikoは、SSHプロトコルを利用してネットワーク機器に接続し、自動的にログイン処理を行い、コマンドを実行したり、設定ファイルをダウンロードしたりできます。PythonスクリプトからNetmikoを利用することで、複数の機器への一括操作や、定期的な設定バックアップなどの作業を自動化できます。

Netmikoのメリット

  • 作業効率の向上: 手作業での設定作業を自動化することで、大幅な時間短縮を実現できます。
  • ヒューマンエラーの削減: スクリプトによって自動化された操作は、人的ミスを減らし、設定の一貫性を保ちます。
  • 柔軟なカスタマイズ: Pythonスクリプトとして記述するため、ニーズに合わせて柔軟なカスタマイズが可能です。
  • スケーラビリティ: 大規模なネットワーク環境でも、効率的に機器を管理できます。
  • オープンソース: 無償で利用できるオープンソースライブラリです。

Netmikoのインストール

Netmikoは、pipコマンドを使って簡単にインストールできます。

pip install netmiko

Netmikoを使った基本的な操作

  1. デバイス情報の定義:

    Netmikoで接続するネットワーク機器の情報を、辞書形式で定義します。例えば、以下のような情報が必要です。

    device = {
       "device_type": "cisco_ios",  # デバイスのタイプ (Cisco IOS, Juniper Junosなど)
       "host": "192.168.1.1",     # デバイスのIPアドレス
       "username": "your_username", # ログインユーザ名
       "password": "your_password", # ログインパスワード
       "secret": "your_enable_secret", # enableパスワード (必要な場合)
    }
    

    device_typeには、接続する機器の種類を指定します。Netmikoは、様々な種類の機器に対応しており、対応機器の種類はNetmikoのドキュメントを参照してください。

  2. Netmikoオブジェクトの作成と接続:

    定義したデバイス情報を使って、Netmikoオブジェクトを作成し、デバイスに接続します。

    from netmiko import ConnectHandler
    
    try:
       net_connect = ConnectHandler(**device)
       print("接続成功!")
    except Exception as e:
       print(f"接続エラー: {e}")
       exit()
    

    ConnectHandlerは、Netmikoの中核となるクラスで、デバイスへの接続処理を行います。**deviceは、辞書deviceの要素をキーワード引数としてConnectHandlerに渡すための記法です。

  3. コマンドの実行:

    send_command()メソッドを使って、デバイスにコマンドを実行します。

    output = net_connect.send_command("show version")
    print(output)
    

    send_command()メソッドは、実行したコマンドの結果を文字列として返します。

  4. 設定コマンドの実行:

    send_config_set()メソッドを使って、設定コマンドをデバイスに実行します。設定コマンドは、リスト形式で渡します。

    config_commands = [
       "interface loopback 100",
       "ip address 192.168.100.1 255.255.255.0",
       "description Managed by Netmiko"
    ]
    output = net_connect.send_config_set(config_commands)
    print(output)
    

    send_config_set()メソッドは、設定コマンドの実行結果を文字列として返します。

  5. 切断:

    作業が完了したら、disconnect()メソッドを使ってデバイスとの接続を切断します。

    net_connect.disconnect()
    print("接続を切断しました。")
    

簡単なサンプルスクリプト

以下は、Netmikoを使ってCisco IOSデバイスに接続し、show versionコマンドを実行して、その結果を表示する簡単なサンプルスクリプトです。

from netmiko import ConnectHandler

device = {
    "device_type": "cisco_ios",
    "host": "192.168.1.1",
    "username": "your_username",
    "password": "your_password",
    "secret": "your_enable_secret",
}

try:
    net_connect = ConnectHandler(**device)
    print("接続成功!")
    output = net_connect.send_command("show version")
    print(output)
    net_connect.disconnect()
    print("接続を切断しました。")
except Exception as e:
    print(f"接続エラー: {e}")

まとめ

Netmikoは、ネットワークエンジニアにとって非常に強力なツールです。今回紹介した基本的な使い方をマスターすることで、日々の業務を大幅に効率化できるはずです。Netmikoのドキュメントや、他のネットワークエンジニアのブログなどを参考に、さらに高度な使い方を習得し、ネットワーク自動化のスキルを向上させていきましょう。



< Fabric
コラム一覧に戻る
Gemini >

レッスン概要

◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!