IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Pythonでネットワーク自動化をしよう

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第19回 netmikoライブラリ (小澤昌樹) 2024年2月

1. はじめに

みなさん、こんにちは。

今回も、ネットワーク自動化に活用できるPythonのライブラリを紹介します。これまでに、subprocessライブラリとtelnetライブラリを紹介してきましたが、今回は、ネットワークデバイスにアクセスし、コマンドを送信することができるnetmikoライブラリを紹介しましょう。

2. netmikoライブラリ

netmikoライブラリは、Pythonを用いてネットワークデバイスの自動化を行うことができるサードパーティ製ライブラリです。ネットワークエンジニアやシステム管理者が、ネットワークデバイスの管理を効率化し、作業負荷を軽減するために利用されています。Pythonスクリプトでの操作性が高いライブラリです。

netmikoはSSHを使ってデバイスに接続し、コマンドを送信します。Telnetもサポートしていますが、主にSSHを使用します。Cisco、Juniper、Aristaなど幅広いベンダーのネットワークデバイスに対応していますが、ベンダーに依存しないコマンド実行が可能となります。

netmikoの主な用途は以下のようなものです。

  • 複数のネットワークデバイスに同じ設定を自動適用する
  • 定期的な設定変更やバックアップなどのタスクを自動化する
  • デバイスの状態確認やトラブルシューティングを自動で行う
  • 大規模なネットワークの構成管理をスクリプト化する
3. netmikoライブラリの使い方

netmikoライブラリは、次のように使用します。

netmikoライブラリをインストールします

netmikoは、サードパーティ製ライブラリなので、pipを使用してインストールします。以下のコマンドをコマンドラインで実行してインストールしてください。


$ pip install netmiko
ConnectHandlerクラスをインポートします

ConnectHandlerクラスは、netmikoで提供されるクラスの1つで、ネットワークデバイスに接続するためのメソッドを提供します。以下のように、netmikoライブラリのConnectHandlerクラスをインポートします。

なお、ここからは、Pythonのプロンプト「>>>」を表記しませんので、ご注意ください。


from netmiko import ConnectHandler
ConnectHandlerクラスのインスタンスを作成します

ConnectHandlerクラスのインスタンスを作成するには、以下のようにします。インスタンスが作成された段階でネットワークデバイスとの接続が確立します。

以下のコードでは、ネットワークデバイスに関する情報をdevice変数に設定し、それを引数としてConnectHandlerクラスのインスタンスを作成しています。device_type、host、username、passwordは必須パラメータで、それ以外にも接続に必要な情報を設定することができます。例えば、secretパラメータは、Ciscoデバイスの特権モードに移行するためにパスワードを設定するものです。


# デバイスに関する情報を設定します(Ciscoデバイスを想定)
device = {
    ’device_type’: ’cisco_ios’,         # デバイスの種類
    ’host’: ’192.168.1.1’,              # デバイスのIPアドレス
    ’username’: ’admin’,                # ログインに使用するユーザー名
    ’password’: ’password123’,          # ログインに使用するパスワード
    ’secret’: ’enable_password’,        # 特権モードに移行するためのパスワード
}
# ConnectHandlerクラスのインスタンスを作成します
connection = ConnectHandler(**device)
コンソールの設定を変えるためのコマンドを送信します

コマンドの実行結果はコンソールで取得するため、コンソールの設定を変えておくとよいでしょう。

  • コンソールの表示を英語にして、文字コードをASCIIにします。
  • コンソールのスクロールを停止しません。
  • コンソールの1行あたりの表示文字数を200にします。

connection.send_command("console character en.ascii")
connection.send_command("console lines infinity")
connection.send_command("console columns 200")
ネットワークデバイスにコマンドを送信します

send_command()メソッドを使用してネットワークデバイスにshow versionコマンドを送信し、その結果を取得します。


output = connection.send_command("show version")
結果を取得します

print文で取得した結果を表示します。


print(output)
接続を閉じます

最後に、disconnect()メソッドを使用してネットワークデバイスとの接続を閉じます。


connection.disconnect()
4. まとめ

今回は、Pythonでネットワーク自動化に使えるライブラリの1つであるnetmikoを説明しました。netmikoは、SSHやTelnetを介してネットワークデバイスに接続し、設定変更や操作を自動化することができるライブラリです。主要なネットワークOSであるCisco IOSやJuniper Junosなどをサポートしており、ベンダーに依存しない管理が可能となります。

次回は、napalmライブラリを説明していきたいと思います。これらのライブラリを上手く使いこなせば、ネットワークエンジニアにとって大変有益なスキルとなるでしょう。次回もお楽しみに。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes