实验环境
实验环境与实验一相同,不再重复
代码解析
1.从netmiko模块中导入ConnectHandler()函数
from netmiko import ConnectHandler
2.创建包含设备信息的字典,值得注意的是device_type这个key值所对应的value是要严格准确的。
sw1 = {
'device_type':'cisco_nxos',
'ip': '1.1.1.1',
'username': 'admin',
'password': 'admin@123'复制
}
3.将字典转换成关键字参数的形式
net_connect = ConnectHandler(**sw1)
print('Succesfully connected to '+ sw1['ip'])
4.配置log服务器地址为3.3.3.3
output = net_connect.send_config_set('logging server 3.3.3.3')
5.保存配置
save_command = net_connect.save_config()
print(output)
6.查看保存到启动文件的配置信息
result = net_connect.send_command('show startup-config | in logging')
print(result)
运行结果

相关说明
1.从netmiko的方法中,我们可以看出,对于回显和配置命令,netmiko分别用send_command()和send_config_set(),更准确地说,send_command()是特权模式下执行命令,而send_config_set()是全局模式下执行命令。但这种方式不一定全对,并非所有的配置命令都在全局模式下进行。

2.从代码量来说,netmiko要比paramiko简洁,这是因为像send_config_set()函数本身自带conf ter以及 end命令,这样使得我们少了很多代码量,但并非所有情况下,send_config_set()都会退出全局模式,比如IOS-XR则不会。
3.send_config_set()可以一次输入多条命令,它的参数可以是个列表,而send.command()一次只能输入一个命令。

4.从运行结果我们可以看出,netmiko自动将命令行回显跟设备提示符删除了,目的是为了显示更加简洁,如果想看到命令行提示符,可以在send.command()中的参数设置完成
result = net_connect.send_command('show run | in logging',strip_command=False,strip_prompt=False)

paramiko 与 netmiko 对比
1.从使用便捷性上来说,netmiko是要优于paramiko的,netmiko是基于paramiko开发的,就像作者Kirk Byers所说:Netmiko was created to simplify this lower-level SSH management across a wide set of networking vendors and platforms. 是为了简化跨网络设备平台的ssh管理。它支持多厂商的设备,简化命令行回显内容的读取,简化配置命令的执行等。
2.从兼容性上来说,paramiko优于netmiko,你能从netmiko的官网看到它支持主流厂商的大多数网络设备类型,其中netmiko将平台分为3大类别:
(1).Regularly tested :定期测试
netmiko的每个版本都会对这些平台进行完整的测试
(2).Limited testing:有限测试
有限测试意味着在某个时间点针对该平台上的特定配置与操作回显进行测试
(3).Experimental:实验性
实验性意味着模块开发进行了一般适配,但版本未经过系统的单元测试

完整版支持列表:https://github.com/ktbyers/netmiko/blob/develop/PLATFORMS.md#supported-platforms
正是由于netmiko的二次封装,使得它在某些平台会遇到一些“坑”,这个需要一定的代码与网络配置逻辑分析能力。所以有人认为,paramiko更加符合网络工程师的逻辑,命令行的执行要有一定的前置条件,同时它也会导致一些影响。
3.总结:如果你是想深入学习网络自动化/NetDevOps,那么paramiko是必须要掌握的,它能让你更加直观地理解使用Python来登录、管理设备,更加全面地锻炼自己的编程能力;而如果你单纯把python作为一个简化运维管理的工具,那netmiko更加容易上手,简洁高效。
参考文档
1.https://pynet.twb-tech.com/blog/automation/netmiko.html
2.https://github.com/ktbyers/netmiko