对于遇到这个问题的每个人来说,问题是在 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 视图使用。