前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >上代码!网络运维必会:批量登录地址不连续的交换机

上代码!网络运维必会:批量登录地址不连续的交换机

作者头像
博文视点Broadview
发布2023-04-12 19:17:58
2890
发布2023-04-12 19:17:58
举报

👆点击“博文视点Broadview”,获取更多书讯

作为一名网络运维人员,登录交换机一定是像家常便饭一样的必会的技能!

也许,批量登录地址连续的交换机是一件so easy的事情。

然而,在生产环境中,交换机的管理IP地址基本上都是不连续的,有些交换机的管理IP地址甚至在不同的网段。

在这种情况下,我们就不能简单地用for循环来登录交换机了。我们要额外建立一个文本文件,把需要登录的交换机的管理IP地址全部写进去,然后用for循环配合open()函数来读取该文档中的管理IP地址,从而达到批量登录交换机的目的。

01

实验目的

通过Python脚本批量登录所有交换机,并在每个交换机上都开启EIGRP。

02

实验准备

(1)把SW5的管理地址从192.168.2.15改成192.168.2.55,如下图所示。

(2)在CentOS上创建一个名为ip_list的TXT文件,把所有交换机的管理IP地址都放进去,注意该文件和等下要创建的脚本位于同一个文件夹下,如下图所示。

(3)在运行代码前,检查5台交换机的配置,确认它们都没有开启EIGRP。

运行代码前,SW1的配置如下图所示。

运行代码前,SW2的配置如下图所示。

运行代码前,SW3的配置如下图所示。

运行代码前,SW4的配置如下图所示。

运行代码前,SW5的配置如下图所示。

(4)在主机上创建实验2 的脚本,将其命名为lab2.py,如下图所示。

03

实验代码

将下列代码写入脚本lab2.py。

代码语言:javascript
复制
import paramikoimport timefrom getpass import getpass

username = input('Username: ')password = getpass('password: ')

f = open("ip_list.txt", "r")for line in f.readlines():    ip = line.strip()    ssh_client = paramiko.SSHClient()    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())    ssh_client.connect(hostname=ip, username=username, password=password,                        look_for_keys=False)    print ("Successfully connect to ", ip)    remote_connection = ssh_client.invoke_shell()    remote_connection.send("conf t\n")    remote_connection.send("router eigrp 1\n")    remote_connection.send("end\n")    remote_connection.send("wr mem\n")    time.sleep(1)    output = remote_connection.recv(65535)    print (output.decode("ascii"))

f.close()ssh_client.close

04

代码分段讲解

(1)和实验1稍有不同,我们在导入getpass模块时用的是from getpass import getpass,因此我们可以把getpass.getpass('password: ')简写成getpass('password: ')。

代码语言:javascript
复制
import paramikoimport timefrom getpass import getpass

username = input('Username: ')password = getpass('password: ')

(2)用open()函数打开之前创建好的包含5个交换机的管理IP地址的文档(ip_list.txt),通过for循环来依次遍历readlines()方法返回的列表中的每个元素(即每个交换机的管理IP地址),即可达到批量依次登录SW1~SW5的目的,即使这5个交换机的管理IP地址不是连续的。

代码语言:javascript
复制
f = open("ip_list.txt", "r")for line in f.readlines():    ip = line.strip()    ssh_client = paramiko.SSHClient()    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())    ssh_client.connect(hostname=ip,username=username,password=password,                           look_for_keys=False)    print ("Successfully connect to ", ip)

(3)登录每台交换机后配置EIGRP,将回显内容打印出来。

代码语言:javascript
复制
    remote_connection = ssh_client.invoke_shell()    remote_connection.send("conf t\n")    remote_connection.send("router eigrp 1\n")    remote_connection.send("end\n")    remote_connection.send("wr mem\n")    time.sleep(1)    output = remote_connection.recv(65535)    print (output.decode("ascii"))

(4)文件有开有关,脚本结束前用close()关掉ip_list.txt文档,并且关闭SSH链接。

代码语言:javascript
复制
f.close()ssh_client.close

05

验证

(1)因打印出的回显内容过长,这里只截取自动登录SW1、SW2做配置的部分代码,可以看见代码中自动登录了每个交换机开启EIGRP并保存配置,随后退出,如下图所示。

(2)依次登录5个交换机验证配置。

运行代码后,SW1的配置如下图所示。

运行代码后,SW2的配置如下图所示。

运行代码后,SW3的配置如下图所示。

运行代码后,SW4的配置如下图所示。

运行代码后,SW5的配置如下图所示。

以上是在思科设备上进行的实验,如果想要迁移到华为设备,以及更多实验内容,尽在《网络工程师的Python之路:网络运维自动化实战(第2版)》一书!

限时五折优惠,快快扫码抢购吧!

每日抽奖赠书

奖品《学习的学问》

代码语言:javascript
复制
发布:刘恩惠
审核:陈歆懿 

如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连<  PAST · 往期回顾  >
Java 8已被弃用,全面拥抱Java17的时代来临!

点击阅读原文,查看本书详情!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验目的
  • 实验准备
  • 实验代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档