0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用python脚本批量登录网络设备修改配置

jf_HnAzBl9o 来源:网络工程师笔记 作者:网络工程师笔记 2022-10-19 09:12 次阅读

之前分享过利用python脚本登录一台交换机

有同学说希望出个批量的。

今天,它来了!

看好喔!好好学!

说不定,老板就给你加鸡腿了!

一、实验环境搭建

1、按照下图,在ensp模拟器上搭建环境,为了演示批量修改设备,龙哥这里实验4台路由器,当然了,如果你电脑性能足够牛逼,你也可以多用几台路由器咯!然后标注好IP地址。

f4f4b336-4f43-11ed-a3b6-dac502259ad0.png

2、物理电脑(即我台式电脑)与ensp做好桥接:

f52e5be0-4f43-11ed-a3b6-dac502259ad0.png

3、给每台路由器做好初始化配置,即配置修改设备默认名称、配置管理IP地址、配置SSH及登录用户名和密码。

以R2为例(小白,其他设备参考R2配置),修改设备名、配置IP地址:

[Huawei]SYS R2

[R2]

[R2]int g0/0/0

[R2-GigabitEthernet0/0/0]ip add 192.168.56.20 24

[R2-GigabitEthernet0/0/0]

[R2-GigabitEthernet0/0/0]qu

[R2]

以R2为例,配置SSH,其他设备参考如下即可:

[R2]rsa local-key-pair create

The key name will be: Host

% RSA keys defined for Host already exist.

Confirm to replace them? (y/n)[n]:y

The range of public key size is (512 ~ 2048).

NOTES: If the key modulus is greater than 512,

It will take a few minutes.

Input the bits in the modulus[default = 512]:2048

Generating keys...

.......+++

..............+++

.....++++++++

...............++++++++

[R2]user-interface vty 0 4

[R2-ui-vty0-4]authentication-mode aaa

[R2-ui-vty0-4]protocol inbound ssh

[R2]aaa

[R2-aaa]local-user along password cipher along123

[R2-aaa]local-user along privilege level 15

[R2-aaa]local-user along service-type ssh

[R2-aaa]ssh user along authentication-type password

[R2]

[R2]stelnet server enable

[R2]

上述配置完,建议用secureCRT先登录一下各个设备,验证网络连通性、ssh连通性是否ok?

这里以R1为例,验证一下。测试时,你们可以每台都验证一下。

f5721f42-4f43-11ed-a3b6-dac502259ad0.png

f5c911e4-4f43-11ed-a3b6-dac502259ad0.png

这样验证的好处,假如待会我们写的python脚本如果有问题,那跟网络、ssh配置就没关了,便于后续排错就对啦!

二、准备好批量IP清单

1、这里我先创建4台路由器管理ip的清单,用txt创建:

f5f5e5ac-4f43-11ed-a3b6-dac502259ad0.png

2、注意!注意!注意!这个ip清单需要放到跟你待会创建的python脚本同一个目录下,比如我待会创建一个名为router-lab.py的python脚本:

f60d55ca-4f43-11ed-a3b6-dac502259ad0.png

三、编写python脚本

import paramiko

import time

from getpass import getpass

user = input('Username:')

pw = getpass('password:')

f = open("ip-list.txt","r")

for line in f.readlines():

ip = line.strip()

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=ip,username=user,password=pw)

print("恭喜您成功登录ensp的路由器!", ip)

command = ssh.invoke_shell()

command.send("system ")

command.send("vlan 20 ")

command.send("quit ")

command.send("ospf ")

command.send("area 0 ")

command.send("net 192.168.56.0 0.0.0.255 ")

command.send("quit ")

time.sleep(2)

output = command.recv(65535)

print(output.decode("ascii"))

ssh.close()

注意:python写for循环时,一定要注意缩进格式。

代码解释:

f = open("ip-list.txt","r")

答:定义一个f文件对象,r表示,用只读形式,打开ip-list.txt文件。这个文件就刚刚我们创建的ip清单,即你要批量管理的ip地址。

for line in f.readlines():

ip = line.strip()

答:利用for循环语句,f.readlines是逐行读取f文件对象,赋给line。

line.strip()我理解是移除空格或换行符,然后复制给ip。

其他代码这里不再解释,可以参考往期的:

四、执行脚本与验证

1、执行前的确认

从上述代码,我们可以知道,我们的目标是为设备批量创建vlan20和创建ospf协议,并把管理网段宣告的area 0中。

所以,还没执行前,我们可以登录设备看看,确实没有vlan 20 和 ospf相关配置:

f6196932-4f43-11ed-a3b6-dac502259ad0.png

f627655a-4f43-11ed-a3b6-dac502259ad0.png

f6397d80-4f43-11ed-a3b6-dac502259ad0.png

f64b7896-4f43-11ed-a3b6-dac502259ad0.png

2、接下来,我们开始执行代码:

用编辑器执行也可以或双击python脚本也行

f6603fec-4f43-11ed-a3b6-dac502259ad0.png

然后在弹出的窗口输入用户名和密码即可:

f699e6ac-4f43-11ed-a3b6-dac502259ad0.png

然后观察运行情况:

f6ad6344-4f43-11ed-a3b6-dac502259ad0.png

f6c1d39c-4f43-11ed-a3b6-dac502259ad0.png

可知,python脚本执行成功了,我们也可以再通过ensp登录路由器看看检查配置,确认是否生效了?

f6d9a620-4f43-11ed-a3b6-dac502259ad0.png

f6f63b50-4f43-11ed-a3b6-dac502259ad0.png

f7046496-4f43-11ed-a3b6-dac502259ad0.png

f719f84c-4f43-11ed-a3b6-dac502259ad0.png

上述这些截图中,我们可以知道,确实生效了。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 路由器
    +关注

    关注

    22

    文章

    3505

    浏览量

    111349
  • 网络设备
    +关注

    关注

    0

    文章

    266

    浏览量

    29356
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
收藏 人收藏

    评论

    相关推荐

    外网访问家里的网络设备

    网络设备
    学习电子知识
    发布于 :2023年07月17日 20:06:18

    ORCAD如何批量修改网络排名

    我用的是ORCAD Capture16.3做原理图,我想批量修改网络名,改怎么操作呢?谢谢指教,希望能截图说明,TKS。
    发表于 01-04 15:45

    各类网络设备

    ` 网络设备,锐捷,艾泰,D-link,华为,H3C,思科,韩电,安普`
    发表于 11-29 11:15

    Linux常用网络设备

    网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口。众所周知,在 OSI(Open Systems Interconnection,开放网际互连)中,网络被划分为七个层次,从下到
    发表于 07-25 07:37

    如何修改嵌入式网络设备驱动?

    嵌入式刚刚学,没过入门 ,最近中途加入项目组,负责嵌入式内核移植,源代码都有,因为换了芯片,需要修改网络设备驱动,不会呀,求大神指点,给个思路,这东西一个半月搞完有可能吗??
    发表于 06-19 05:37

    嵌入式网络设备地址动态配置的研究

    本文通过嵌入式结构网络设备̣:一款IPV6 核心路由器,系统地介绍了分布式系统中嵌入式结构网络设备地址的动态配置方法,该方法结合了F1ash 和只读存储器的灵活应用,有效
    发表于 08-27 10:46 11次下载

    Protel DXP批量修改如何使用

    Protel DXP批量修改如何使用 Protel DXP批量修改的某些方面比Protel 99se还要简单,在弄清楚Protel DXP批量
    发表于 07-02 10:09 3770次阅读

    如何使用Protel DXP的批量修改

    Protel DXP批量修改的某些方面比Protel 99se还要简单,在弄清楚Protel DXP批量修改之前首先要弄懂Protel 99se的
    发表于 07-31 16:11 0次下载
    如何使用Protel DXP的<b class='flag-5'>批量</b><b class='flag-5'>修改</b>

    Orcad批量修改网络标号的方法

    怎么对Orcad的网络标号进行统一批量修改呢?
    的头像 发表于 01-19 14:27 1.8w次阅读
    Orcad<b class='flag-5'>批量</b><b class='flag-5'>修改</b><b class='flag-5'>网络</b>标号的方法

    Python写SecureCRT批量登录/巡检网络设备脚本

    因为有约200台的网络设备需要每天登录巡检、查看配置、保存配置、定期更改密码(每周改一次),如果都手动去登录
    的头像 发表于 12-28 09:32 3145次阅读

    python练手小程序

    如果管理网络设备很多,不可能靠人力每天去登录设备去查看是否在线。所以,可以利用python脚本
    的头像 发表于 01-09 09:49 428次阅读

    如何通过Python脚本批量采集华为交换机配置

    通过学习python网络运维自动化减少重复无意义的工作量,本次实验虽然只是一条命令,通过display current-configuration采集设备配置,但是在有大量
    的头像 发表于 01-09 10:32 3437次阅读

    如何使用Python通过SNMP监控网络设备

    丰富的第三方库,实现绘图入库等,该方式比较繁琐,我们管理的设备还有一些网络设备,这些设备无法通过开发程序来实现监控,为了实现全平台全设备监控,我决定使用SNMP实现监控任务。
    的头像 发表于 01-09 10:38 925次阅读

    shell实例三(编写批量修改扩展名脚本)

    实现功能: 编写批量修改扩展名脚本,如批量将 txt 文件修改为 doc 文件 执行脚本时,
    的头像 发表于 11-09 09:35 265次阅读
    shell实例三(编写<b class='flag-5'>批量</b><b class='flag-5'>修改</b>扩展名<b class='flag-5'>脚本</b>)

    分别使用多线程多进程协程+paramiko在华为交换机批量快速进行配置

    python对于网络设备的操作属于I/O密集型,在脚本运行时,存在大量的等待时间。我们便可以利用这些空闲的时间,进行其他的操作。
    的头像 发表于 01-16 09:13 323次阅读
    分别使用多线程多进程协程+paramiko在华为交换机<b class='flag-5'>批量</b>快速进行<b class='flag-5'>配置</b>