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系で使えないのかどうかはまた暇な時に調査します。
参考サイト
大変参考になりました。ありがとうございます。