您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
网络设备管理(Python自动化运维实战:使用Python管理网络设备)
脚本,设备,地址网络设备管理(Python自动化运维实战:使用Python管理网络设备)
发布时间:2020-12-06加入收藏来源:互联网点击:
现在,我们已经知道如何在不同的操作系统中使用和安装Python以及如何使用EVE-NG搭建网络拓扑。在本章中,我们将学习如何使用目前常用的网络自动化库自动完成各种网络任务。Python可以在不同的网络层上与网络设备进行交互。
首先,Python可以通过套接字编程和socket模块操纵底层网络,从而为Python所在的操作系统和网络设备之间搭建一个低层次的网络接口。此外,Python模块还可以通过Telnet、SSH和API与网络设备进行更高级别的交互。本章将深入探讨如何在Python中使用Telnet与SSH模块在远程设备上建立连接和执行命令。
本章主要介绍以下内容:
使用Python通过Telnet连接设备;Python和SSH;使用netaddr处理IP地址和网络;网络自动化实战示例。4.1 技术要求应检查是否正确安装了下列工具并保证它们能够正常使用:
Python 2.7.1x;PyCharm社区版或专业版;EVE-NG,网络仿真器的安装和配置请参阅第3章。本章中出现的所有脚本请参见GitHub网站。
4.1.1 Python和SSHSSH和Telnet的不同之处在于客户端与服务器之间交换数据的通道不一样。SSH使用的是安全链路,在客户端和设备之间创建了一个使用不同的安全机制进行加密的隧道,通信内容很难被解密。因此在需要保证网络安全的时候,网络工程师会首先选择使用SSH协议。
Paramiko库遵循SSH2协议,支持身份验证,密钥处理(DSA、RSA、ECDSA和ED25519),以及其他SSH功能(如proxy命令和SFTP)。在Python中当需要使用SSH连接到网络设备时通常使用这个库。
4.1.2 Paramiko模块Paramiko是Python中应用最广的SSH模块。模块本身使用Python语言编写和开发,只有像crypto这样的核心函数才会用到C语言。从其GitHub官方链接上能够看到代码的贡献者和模块历史等诸多信息。
1.安装模块打开Windows cmd或Linux shell,运行下面的命令,从PyPI下载最新的Paramiko模块。如下图所示,同时,该命令会自动下载其他依赖包(如cyrptography、ipaddress和six),并将它们安装到计算机上。
pip install paramiko
在命令行中输入Python,然后导入Paramiko模块,验证是否安装成功。如下图所示,正确安装之后,能够成功导入模块。也就是说,命令行上不会出现任何错误提示。
2.用SSH连接网络设备如前所述,要使用Paramiko模块,首先需要在Python脚本中导入它,然后通过继承SSHClient()来创建SSH客户端。然后,设置Paramiko的参数,使其能够自动添加任意未知的主机密钥并信任与服务器之间的连接。接下来,将远程主机的信息(IP地址、用户名和密码等)传递给connect函数。
#!/usr/bin/python__author__ = "Bassim Aly"__EMAIL__ = "basim.alyy@gmail.com"import paramikoimport timeChannel = paramiko.SSHClient()Channel.set_missing_host_key_policy(paramiko.AutoAddPolicy())Channel.connect(hostname="10.10.88.112", username='admin',password='access123', look_for_keys=False,allow_agent=False)shell = Channel.invoke_shell()
AutoAddPolicy()是一种策略,可以作为函数set_missing_host_key_policy()的输入参数。在虚拟实验室环境中推荐使用这种策略,但在生产环境中应当使用更加严格的策略,如WarningPolicy()或RejectPolicy()。
最后,invoke_shell()将启动一个连接到SSH服务器的交互式shell会话。在调用该函数时可以传入一些其他参数(如终端类型、宽度、高度等)。
Paramiko的连接参数如下。
Look_For_Keys:默认为True,强制Paramiko使用密钥进行身份验证。也就是说,用户需要使用私钥和公钥对网络设备进行身份验证。在这里使用密码验证,因此将该参数设置为False。allow_agent:表示是否允许连接到SSH代理,默认为True。在用密钥验证时可能需要使用这个选项。由于这里使用的是用户名/密码,因此禁用它。最后一步,把各种命令(如show ip int b和show arp)发送到设备终端,并将返回结果输出到Python窗口中。
shell.send("enablen")shell.send("access123n")shell.send("terminal length 0n")shell.send("show ip int bn")shell.send("show arp n")time.sleep(2)print shell.recv(5000)Channel.close()
脚本运行结果如下图所示。
4.1.3 netmiko模块
如果需要在远程设备上执行耗时很长的命令,就要强制Python等待一段时间,直到设备生成输出并将结果返回给Python,因此最好使用time.sleep()。否则,Python可能得不到正确的输出结果。
netmiko是Paramiko的增强版本,专门面向网络设备。虽然Paramiko能够处理与设备的SSH连接并判断设备类型是服务器、打印机还是网络设备,但netmiko在设计时针对网络设备做了优化,能够更有效地处理SSH连接。netmiko还支持各种不同的设备厂商和平台。
netmiko也是对Paramiko的封装,它使用许多其他增强功能扩展了Paramiko,比如使用启用的密码直接访问所支持的设备,从文件读取配置并将推送到设备,在登录期间禁用分页显示,以及默认在每条命令后面加上回车符"n"。
1.支持的设备商netmiko支持许多供应商的设备,并定期在支持列表中添加新的供应商。netmiko支持的供应商列表分为定期测试类、有限测试类和实验类。在该模块的GitHub页面上可以找到这个列表。
定期测试类中支持的供应商如下图所示。
有限测试类中支持的供应商如下图所示。
实验类中支持的供应商如下图所示。
2.安装和验证安装netmiko非常简单。打开Windows命令行窗口或Linux shell,执行下面的命令就可以从PyPI获取最新版本的netmiko包(见下图)。
pip install netmiko
然后,在Python shell中导入netmiko,验证模块是否正确地安装到Python site-packages中。
$python>>>import netmiko
3.使用netmiko建立SSH连接
现在该开始使用netmiko了,让我们来看看它强大的SSH功能。首先连接到网络设备并在上面执行命令。默认情况下,netmiko在建立会话(session)的过程中会在后台处理许多操作(如添加未知的SSH密钥主机,设置终端类型、宽度和高度),在需要的时候还可以进入特权(enable)模式,然后通过运行供应商提供的命令来禁用分页。
首先,以字典格式定义设备并提供下列5个必需的关键信息。
R1 = ( 'device type ': 'cisco ios', 'ip': '10.10.88.110', 'username': 'admin', 'password': 'access123', 'secret': 'access123',}
第一个参数是device_type,为了执行正确的命令,需要使用这个参数来定义平台供应商。然后,需要SSH的IP地址。如果已经使用DNS解析了IP地址,该参数可能是主机名;否则,该参数是IP地址。接下来,提供username、password以及以secret参数传递的特权模式的密码。注意,可以使用getpass()模块隐藏密码,并且只在脚本执行期间提示它们。
虽然变量中的密钥序列不重要,但是为了使netmiko能够正确解析字典并开始和设备建立连接,密钥的名称应该和之前示例中提供的密钥完全一样。
接下来,从netmiko模块导入ConnectHandler函数,并提供定义的字典来开始建立连接。因为所有的设备是通过特权模式的密码配置的,所以需要为创建的连接提供.enable(),以在特权模式下访问。使用.send_command()在路由器终端上执行命令,.send_command()将会执行命令并通过变量的值显示设备的输出。
上一篇:防盗窗价格(防盗窗是铝合金好还是不锈钢好 ,铝合金防盗窗多少钱一平方?)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |