CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさん、こんにちは。
今回も、ネットワーク自動化に活用できるPythonのライブラリを紹介します。これまでに、subprocessライブラリとtelnetライブラリを紹介してきましたが、今回は、ネットワークデバイスにアクセスし、コマンドを送信することができるnetmikoライブラリを紹介しましょう。
netmikoライブラリは、Pythonを用いてネットワークデバイスの自動化を行うことができるサードパーティ製ライブラリです。ネットワークエンジニアやシステム管理者が、ネットワークデバイスの管理を効率化し、作業負荷を軽減するために利用されています。Pythonスクリプトでの操作性が高いライブラリです。
netmikoはSSHを使ってデバイスに接続し、コマンドを送信します。Telnetもサポートしていますが、主にSSHを使用します。Cisco、Juniper、Aristaなど幅広いベンダーのネットワークデバイスに対応していますが、ベンダーに依存しないコマンド実行が可能となります。
netmikoの主な用途は以下のようなものです。
netmikoライブラリは、次のように使用します。
netmikoは、サードパーティ製ライブラリなので、pipを使用してインストールします。以下のコマンドをコマンドラインで実行してインストールしてください。
$ pip install netmiko
ConnectHandlerクラスは、netmikoで提供されるクラスの1つで、ネットワークデバイスに接続するためのメソッドを提供します。以下のように、netmikoライブラリのConnectHandlerクラスをインポートします。
なお、ここからは、Pythonのプロンプト「>>>」を表記しませんので、ご注意ください。
from netmiko import 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)
コマンドの実行結果はコンソールで取得するため、コンソールの設定を変えておくとよいでしょう。
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()
今回は、Pythonでネットワーク自動化に使えるライブラリの1つであるnetmikoを説明しました。netmikoは、SSHやTelnetを介してネットワークデバイスに接続し、設定変更や操作を自動化することができるライブラリです。主要なネットワークOSであるCisco IOSやJuniper Junosなどをサポートしており、ベンダーに依存しない管理が可能となります。
次回は、napalmライブラリを説明していきたいと思います。これらのライブラリを上手く使いこなせば、ネットワークエンジニアにとって大変有益なスキルとなるでしょう。次回もお楽しみに。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes