あすたろうのネットワーク備忘録

素人がネットワーク構築始めます

pythonを使用したCisco機器のステータスの取得

初めに

ネットワーク機器にいちいちアクセスしてログインするのが
面倒なので最近流行りの自動化を使ってみました。
驚くほど簡単だったのでノンプログラマーでもできます。

対象機器

Cisco C2940
Macbook macOS Big Sur 11.5
 

準備

事前にターミナルでnetmikoをインストール

pip3 install netmiko

プログラム

下記がログを取得するプログラム(今回はTelnetを使用)  

from netmiko import ConnectHandler
 
# デバイスのタイプやIPアドレス、認証情報をディクショナリで定義
cisco = {
    "device_type": "cisco_ios_telnet", #SSH接続の場合はcisco_iosにする
    "ip": "10.x.x.x",        # 接続先のCisco IOS機器
    "username": "admin",      # ログインユーザー
    "password": "password"# ログインパスワード
    "secret": "password"  # enable パスワード
}
 
# TELNET接続して、コネクションオブジェクトを取得
net_connect = ConnectHandler(**cisco)
 
# 特権モードへ移行する
net_connect.enable()
 
print("--- [●事前確認] ---")
# show コマンドを実行
output = net_connect.send_command("show run int vlan 10")
# 結果を出力
print(output)
 
# 実行したい設定コマンドをリストで定義
lines = ["int vlan 10","description test"]
# 設定コマンドを実行(事前のconf tも自動で実行される)
output= net_connect.send_config_set(lines)
 
print("\n--- [●事後確認] ---")
# show コマンドを実行
output = net_connect.send_command("show run int vlan 10")
# 結果を出力
print(output)
 
# 切断
net_connect.disconnect()

苦戦したこと

間違って最初は

pip install netmiko

でインストールしてしまい、いくらpython ファイル名.pyを実行しても下記のエラーで悩まされました。

ImportError: No module named 'netmiko' 

色々調べていくと、どうやらこのエラーはpython3系では
netmikoがインストールされていない時に表示されるそうです。
先程使用したpipコマンドだとpython2系でインストールされてしまうため
下記のコマンドを使用します。

pip3 install netmiko

  また、ターミナルで実行する際は必ずpython3と記述して実行してください。

python3 ファイル名.py

pythonと記述して実行するとpython2系のコマンドになるので正しく使えません。

python ファイル名.py

netmikoがpython2系で使えないのかどうかはまた暇な時に調査します。  

参考サイト

大変参考になりました。ありがとうございます。

qiita.com