python中支持SSH协议的模块主要有Paramiko和netmiko两种,本次实验采用netmiko模块。
netmikko模块为python的第三方模块,需要使用pip来下载安装。(联网的情况下)
下载完毕后,进入Python 3.10解释器,如果import netmiko没有报错,则说明Netmiko安装成功。
实验拓扑
将ensp的LSW1与本地虚拟网卡loopback0进行桥接,模拟将自己的电脑桥接到以下拓扑网络中。
实验目的:
通过netmiko模块的SSH逐一登录4台交换机LSW2-LSW5,并依次为其配置STP,默认模式为MSTP。
实验脚本
完整代码
from netmiko import ConnectHandler for i in range(20,24): SW={ 'device_type':'huawei', 'ip':'10.0.1.'+str(i), 'username':'python', 'password':'123456', } connect=ConnectHandler(**SW) print('\n'+'-----------------'+'成功登录到交换机'+SW['ip']+'-----------------') config_commands=['stp mode stp','dis stp | include CIST Global Info'] output=connect.send_config_set(config_commands) print(output) connect.save_config()
1.从netmiko模块导入它的链接库函数ConnectHandler(),用于实现SSH登录网络设备。
from netmiko import ConnectHandler
2.创建一个字典SW,该字典包含'device_type'、'ip'、'username'、'password'四个必选值。'device_type'用于指定设备类型,这里我们用的是华为的设备,所以'device_type'为'huawei'。
for i in range(20,24): SW={ 'device_type':'huawei', 'ip':'10.0.1.'+str(i), 'username':'python', 'password':'123456', }
由于我们这里要登陆四台设备,所以要用for循环。
3.调用ConnectHandler()函数,借用for循环,对字典SW进行SSH连接,将他赋值给变量connect,注意SW2前面的**作为标识。
connect=ConnectHandler(**SW)
在Python的在形参前加'*'和'**'表示动态形参
在形参前加'*'表示可以接受多个实参值存进数组
对于在形参前加'**'表示表示接受参数转化为字典类型
4.如果SSH登录成功,则提示成功登录
print('\n'+'-----------------'+'成功登录到交换机'+SW['ip']+'-----------------')
5.创建一个名为config_commands的列表为参数,其元素为需要在交换机上执行的命令。
config_commands=['stp mode stp','dis stp | include CIST Global Info']
6.然后以刚刚创建的config_commands的列表为参数,调用ConnectHandler()的send_config_set()函数来使用上述命令对SW做配置,并将配置过程打印出来。
output=connect.send_config_set(config_commands) print(output)
7.最后用save_config()保存设备配置
connect.save_config()
实验结果
从以上结果可知,netmiko额外替我们输入了:system view和return。
代码优化
如果有大量的交换机其管理ip地址也没什么规律性,此时直接用for循环管理ip地址来登录设备,就不再那么灵活和使用了。此时我们可以把所有交换机的ip地址都放入都放入一个文件名为ip_list的文件,通过for循环readlines()来读取文件中的每行ip地址,来逐台登录设备。
完整脚本
from netmiko import ConnectHandler with open('ip_list.txt') as f: for line in f.readlines(): host=line.strip() SW={ 'device_type':'huawei', 'ip':host, #host是变量,不要粗心加了引号 'username':'python', 'password':'123456', } connect=ConnectHandler(**SW) print('\n'+'-----------------'+'成功登录到交换机'+SW['ip']+'-----------------') config_commands=['stp mode stp','dis stp | include CIST Global Info'] output=connect.send_config_set(config_commands) print(output) connect.save_config()
注意:ip_list要和python脚本在一个文件夹。
结果
到此这篇关于python中SSH远程登录设备的文章就介绍到这了,更多相关python中SSH远程登录设备内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!