python中SSH远程登录设备的实现方法
作者:renkie人可毅 发布时间:2023-10-24 02:30:58
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脚本在一个文件夹。
结果
来源:https://blog.csdn.net/qq_45959697/article/details/124429321


猜你喜欢
- 有的小伙伴在学习数据库的时候,创建表结构的时候不小心把某字段设置成了varchar但是在统计求和的时候就傻眼了,接下来跟着小编学习一下,不用
- 在前面的章节中,我们讨论了Series的计算方法与Pandas的自动对齐功能。不光是Series,DataFrame也是支持运算的,而且还是
- 背景手机型号:型号:iphone 7 / iphone xs max版本:ios 10.3.1 / ios 12.1微信版本:WeChat
- 本文较为详细的分析了Python解释执行的原理,对于深入理解Python可以起到一定的帮助作用。具体分析如下:首先,这里的解释执行是相对于编
- [原文地址] VS 2008 Performance Improvements[原文发表时间] Thursday, September 27
- 下面是Sql Server 和 Access 操作数据库结构的常用Sql,如如何新建一个表,如何删除表,如何删除数据,插入数据等等..希望对
- 滚动页面在自动化操作中,如果web页面过长,而我们需要的元素并不在当前可视页面中,那么selenium就无法对其进行操作;此时,我们就需要像
- SQL语句中要不要加单引号?犯了一个超级超级蠢的错误,把population写成polulation而不自知,多次提醒我找不到polulat
- 资源React-16.8.*react-router-dom-4.3.*TypeScript-3.5.*webpack-4.*eslint-
- 前言今天我们一起来聊聊DataFrame中的索引。上一篇文章当中我们介绍了DataFrame数据结构当中一些常用的索引的使用方法,比如ilo
- 引言 在编写接口自动化测试脚本时,有时我们需要在代码中定
- 对称二叉树的含义非常容易理解,左右子树关于根节点对称,具体来讲,对于一颗对称二叉树的每一颗子树,以穿过根节点的直线为对称轴,左边子树的左节点
- 本文实例讲述了Python selenium的基本使用方法。分享给大家供大家参考,具体如下:selenium是一个web自动化测试工具,se
- 1、代码1:(1)进度条等显示在主窗口状态栏的右端,代码如下:from PyQt5.QtWidgets import QMainWindow
- 定义流的作用是使用统一的方式处理文件、网络和数据压缩等共用同一套函数和用法的操作。简单而言,流是具有流式行为的资源对象。因此,流可以线性读写
- 一、使用docker部署mysql主从 实现主从复制此次使用的是windows版本docker,mysql版本是5.71、使用docker获
- mysql中replace函数替换字符串介绍下mysql的REPLACE()函数语法:REPLACE()函数的语法如下:REPLACE(st
- 一、什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用【索引】 索引允许SQL Server在表中查找数据而不需要扫描整个表。 1
- ConfigParser库的使用及遇到的坑背景:这几天想在接口测试中增加logging打印功能,在testerHome正好发现有人分享自己的
- 使用下面的命令检查是否安装有MySQL Server[root@localhost etc]# rpm -qa | grep mysql /