NetmikoでCisco機器にログインしてコマンド出力を収集
いやいや。
もうNW自動化とかDevopsとかNWエンジニアもコードを書くのが必修とか嫌になっちゃいますね。
そんなこんなで今の現場のNW環境なのですが、ルータやSwitchが何故か現状DNSに登録されてなく例えばTracerouteしても、いまいち分かりづらいということで登録する事になりました。。
下準備として各ルーターのインタフェースのIPアドレスの情報を取得する必要があるのですがさすがに数百台の機器に手動でログインするのはキツイということで、Netmikoを使ってやってみました。
Network Programmability and Automation Fundamentals (Networking Technology)
- 作者:Abuelenain, Khaled,Doyle, Jeff,Karneliuk, Anton,Jain, Vinit
- 発売日: 2021/02/19
- メディア: ペーパーバック
やりたいこと
- Jump用のログインサーバー(Linux)に既にNetmikoが用意されている
- NW機器はオールCisco。但し、Telnetのみログイン可能な機器とSSHのみ可能な機器が混在している。
- Host名とIPアドレスを記載したCSVファイルを読み込んで、ログインしてshowコマンドを実行
いろいろ試して出来たスクリプトが下記になります。
対象機器は全て国内なのでLatencyはさほどないのですが、Forループで
一台ずつログインしていくので時間がかかりました。
決して綺麗なコードでは無いかと思いますが、大目に見てくださいね。
Network Programmability and Automation: Skills for the Next-Generation Network Engineer
- 作者:Edelman, Jason,Lowe, Scott S.,Oswalt, Matt
- 発売日: 2018/03/03
- メディア: ペーパーバック
from netmiko import ConnectHandler import csv def run_show_cmd(hostname, host_ip, d_type): cisco = { 'device_type': d_type, 'ip': host_ip, 'username': 'USERNAME', 'password': 'PASSWORD', 'secret': 'PASSWORD', 'verbose': False, } net_connect = ConnectHandler(**cisco) net_connect.enable() output1 = net_connect.send_command("show run | inc hostname") output2 = net_connect.send_command("show ip int brief") output3 = net_connect.send_command("show inst status") net_connect.disconnect() output = "##############" + host_name + "##############" + "\n" + output1 + "\n" + output2 + "\n" + output3 +"\n\n" print(output) net_connect.disconnect() print("") print("") print("") with open('device_list.csv') as f: reader = csv.reader(f) for r in reader: host_name = r[0] host_ip = r[1] print("##############", host_name, "##############") try: run_show_cmd(host_name, host_ip, "cisco_ios") except: try: run_show_cmd(host_name, host_ip, "cisco_ios_telnet") except: print("target ", host_name, "is not reachable") print("")
- 作者:Lorin Hochstein
- 発売日: 2016/04/16
- メディア: 大型本