【问题标题】:Netmiko session time PythonNetmiko 会话时间 Python
【发布时间】:2022-01-23 11:58:37
【问题描述】:

有没有办法使用 Netmiko 登录到 Cisco 设备并保持登录状态?我有一个 Python 脚本,应该每 5 秒连接一次 Cisco 设备,但最好登录一次并保持登录状态,然后通过脚本发送命令从 Cisco 设备中提取数据。

提前谢谢你

【问题讨论】:

  • 你的问题不是很清楚。如果您创建一个会话并尝试在不断开连接的情况下通过它提取数据,那么问题是什么?
  • 没有问题,但我想保持连接,因为它会减少从 Cisco 设备发送到我的日志服务器的日志,并且会卸载 Radius 和 ASA CPU。

标签: python python-3.x script cisco netmiko


【解决方案1】:

您还可以使用下面的“计划”库。它还具有小时/天/分钟/周设置。

#schedule.every(60).minutes.do(def_name)
#schedule.every().hour.do(def_name)
#schedule.every().day.at("08:00").do(def_name)
#schedule.every().monday.do(def_name)
#schedule.every().wednesday.at("13:15").do(def_name)
schedule.every().minute.at(":05").do(def_name)

while True:
    schedule.run_pending()
    time.sleep(1)

def_name()

【讨论】:

    【解决方案2】:

    您知道keepalive 参数吗? 您还应该注意设备中的超时并留出噪声容限。

    【讨论】:

    • 谢谢你的建议,我试过这个:tczv_asa = { "host": "10.0.1.1", "device_type": "cisco_ios", "username": "user", "password" : "user", "keepalive" : 0, } 尝试将 keepalive 更改为各种值,但它总是在几秒钟后断开连接
    【解决方案3】:

    对于遇到这个问题的每个人来说,问题是在 python 脚本完成后,即使您没有为 Netmiko 设置断开命令,它也会自动断开与 Cisco 设备的连接。

    因此,解决此问题的方法是始终保持联系:

    在创建循环之前连接到您的每个网络设备:

    asafw1 = {
        "host": "10.0.1.1",
        "device_type": "cisco_ios",
        "username": "user",
        "password": "password",
    }
    asafw2 = {
        "host": "10.2.1.1",
        "device_type": "cisco_ios",
        "username": "user",
        "password": "password",
    }
    
    conn1 = ConnectHandler(**asafw1)
    conn2 = ConnectHandler(**asafw2)
    

    然后定义函数并将 conn 参数传递给该函数:

    def update_user_info_function(conn):

    ### Connection to ASA via Netmiko module and Connection Handler function ###
    asa_output = conn.send_command("show version")
    print(asa_output)
    

    现在你调用你的函数并使用上面配置的 conn1 和 conn2 作为参数:

    while True:
        update_user_info_function(conn1)
        update_user_info_function(conn2)
        ### Wait 1 seconds before you go through the loop again ###
        time.sleep(1)
    

    因此,您的网络脚本将始终运行,并且您将始终连接到您的设备。如果您有一个半径服务器,这将非常有用,并且您的所有设备都指向该服务器,这样您将只连接一次到您的设备,保持连接并从该设备中提取数据。因此,您不会每次都连接到该设备来提取数据,这意味着您不会使用太多 CPU,也不会在 radius 服务器上生成很多行日志。

    这个解决方案对我们很有帮助,因为我们正在尝试从 Cisco 设备获取 VPN 数据并将该数据发送到 mysql。使用它,我们可以每秒从 Cisco 设备中提取数据,并将该数据发送到 mysql 并将其存储在那里以供 web 视图使用。

    【讨论】: