猫が小判

FXとIT資格と猫のブログ

 NetmikoでCisco機器にログインしてコマンド出力を収集

いやいや。
もうNW自動化とかDevopsとかNWエンジニアもコードを書くのが必修とか嫌になっちゃいますね。

そんなこんなで今の現場のNW環境なのですが、ルータやSwitchが何故か現状DNSに登録されてなく例えばTracerouteしても、いまいち分かりづらいということで登録する事になりました。。

下準備として各ルーターのインタフェースのIPアドレスの情報を取得する必要があるのですがさすがに数百台の機器に手動でログインするのはキツイということで、Netmikoを使ってやってみました。

やりたいこと

  • Jump用のログインサーバー(Linux)に既にNetmikoが用意されている
  • NW機器はオールCisco。但し、Telnetのみログイン可能な機器とSSHのみ可能な機器が混在している。
  • Host名とIPアドレスを記載したCSVファイルを読み込んで、ログインしてshowコマンドを実行

 

いろいろ試して出来たスクリプトが下記になります。
対象機器は全て国内なのでLatencyはさほどないのですが、Forループで
一台ずつログインしていくので時間がかかりました。

決して綺麗なコードでは無いかと思いますが、大目に見てくださいね。


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("")

初めてのAnsible

初めてのAnsible