netmiko を用いてネットワーク機器と連携する

運用自動化する上でネットワーク機器に接続し設定情報や構成を取得したい場合があるかと思います。

本稿では python のライブラリである netmiko を利用してネットワーク機器に接続し、情報収集を行う手順を紹介します。


動作確認環境

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post7
OS CentOS 7.8.2003
netmiko 3.3.3

netmiko とは

netmiko とは、ネットワーク機器に SSH または Telnet で接続して諸々の操作を行える python ライブラリです。これを利用することで、ネットワーク機器からの情報収集が簡単にできるようになります。

本稿で扱う構成を以下に示します。

netmiko の準備

まず、Kompira Enterprise で netmiko を使用するために、ライブラリ「netmiko_lib」を以下のように作成します。

※ Kompira Enterprise 1.6.2 では、デフォルトで netmiko 3.3.3 がインストールされています。

ライブラリ「netmiko_lib」

from netmiko import Netmiko

def show_users(input):
    connection = Netmiko(**input)
    output = connection.send_command('show users')
    connection.disconnect()
    return output

保存したら以下のように「FUNCTIONS」に関数「show_users」が表示されていることを確認してください。

netmiko と連携を行うジョブフローの作成

それでは、 netmiko と連携を行うジョブフローを作成していきます。

以下のように「netmiko_connect」という名前のジョブフローを作成します。

ジョブフロー「netmiko_connect」

| device_type |
| ip |
| port |
| username |
| password |
 
# 接続するデバイスの情報
[
    input_data = {
        'device_type': device_type,
        'ip': ip,
        'port': port,
        'username': username,
        'password': password
    }
] ->
print(./netmiko_lib.show_users(input_data))

このジョブフローを保存したら、パラメータをそれぞれ以下のように設定してください。

引数 内容
device_type 以下を参考に、接続するネットワーク機器の種類に応じて CLASS_MAPPER[] の

文字列から適切なものを選択
https://github.com/ktbyers/netmiko/blob/master/netmiko/ssh_dispatcher.py

ip 接続するネットワーク機器の IP アドレス
port 接続するネットワーク機器の sshd または telnetd の待ち受けポート番号
username 接続するネットワーク機器のユーザー名
password 接続するネットワーク機器のパスワード

※ 各引数は「” “」もしくは「‘ ‘」で囲んでください。

設定が完了したら以下のように実行をクリックしてください。

処理が完了すると以下のように接続したネットワーク機器のユーザー一覧が表示されます。Location には接続元である Kompira Enterprise サーバーの IP アドレスが表示されます。

※ 画像は device_type を cisco_ios にして、Cisco892J ルータに ssh 接続してコマンドを実行した場合の結果になります。

踏み台サーバー経由での接続

本項では踏み台サーバを用いてネットワーク機器に接続する方法を説明します。今回は ssh の ProxyCommand を用いて行います。構成図を以下に示します。

まず、「公開鍵認証を使ってssh接続をする」の「証明書の作成」、「リモートサーバーでの証明書の登録」を参考に鍵ファイル「/home/kompira/.ssh/kompira.key」 を作成し、「kompira」 ユーザーがプロキシサーバーに対して公開鍵による ssh 接続が行えるように設定してください。

完了したら Kompira Enterprise サーバーのコンソール上で以下のように入力して、パスワード入力無しで ssh 接続ができることを確認してください。

※ root@192.168.1.2 はご使用の環境に合わせて変更してください。

※ permission denied が表示される場合は、kompira.key のパーミッションを変更してください。

$ su kompira -c "ssh -i /home/kompira/.ssh/kompira.key root@192.168.1.2"

次に、ssh のコンフィグファイルを Kompira Enterprise サーバーの /home/kompira/.ssh/config に以下のように作成してください。

※ user 、hostname はご使用の環境に合わせて変更してください。

/home/kompira/.ssh/config

host proxyhost
  IdentityFile /home/kompira/.ssh/kompira.key
  IdentitiesOnly yes
  user root
  hostname 192.168.1.2

host remotehost
  user admin
  hostname 192.168.1.3
  ProxyCommand ssh proxyhost -W %h:%p

次に、ジョブフロー「netmiko_connect」を以下のように変更してください。

ジョブフロー「netmiko_connect」

| device_type |
| ip |
| port |
| username |
| password |
| ssh_config_path = '/home/kompira/.ssh/config' | # ssh のコンフィグファイルのパス
 
# 接続するデバイスの情報
[
    input_data = {
        'device_type': device_type,
        'ip': ip,
        'port': port,
        'username': username,
        'password': password,
        'ssh_config_file': ssh_config_path
    }
] ->
print(./netmiko_lib.show_users(input_data))

これで踏み台サーバーから接続する準備ができました。ジョブフローを保存したら、パラメータをそれぞれ踏み台なしで接続した場合と同様に設定してください。

設定が完了したら実行をクリックしてください。

処理が完了すると以下のように接続したネットワーク機器のユーザー一覧が表示されます。今回は Location に、接続元である Kompira Enterprise サーバーの IP アドレスではなく、踏み台サーバーのIPアドレスが表示されます。

以上のようにすることで、Kompira Enterprise から netmiko を使用し、対応機器から情報を取得することができました。今回は cisco IOS に対して接続を行いましたが、他の NW 機器に対しても接続して連携することが可能です。

本項の手順を利用することで、ネットワーク機器からの情報取得を簡単に行うことができるようになり、定期的な接続や、取得した情報に応じた処理が可能になります。

TOP