IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 5-Jun-2022_NetDevOps学习分享——基于华为网络设备批量修改密码 -> 正文阅读

[系统运维]5-Jun-2022_NetDevOps学习分享——基于华为网络设备批量修改密码

注:本文主要基于了@弈心<<网络工程师的Python之路>>的一些编程思想进行改写。
本专栏的文章主要是一些日常生活、工作遇到的问题,在查阅到相关的资料后整理得出的一些解决方案;希望能尽可能的帮助更多的同行。


前言

前段时间看到一个哥们的需求,那就是给几百台华为的网络交换机进行改密操作。大规模重复性的工作很容易让人感觉到厌烦,从而也更容易出错。
为了解决上述问题,笔者尝试使用Python写了一个小程序用以实现对设备的批量改密及改密后自动验证的操作。
本文基于Windows 10及Python 3的环境进行编写。


一、环境准备

1、安装Python 3:下载链接
2、安装Paramiko模块。可以在Powershell中使用指令“pip3 install paramiko”进行安装。但因为paramiko的镜像源在国外。所以可以使用国内的镜像源进行下载。我用的是豆瓣的网站进行下载“pip3.8 install paramiko -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com”
3、安装Ensp模拟器。

二、拓扑搭建及配置

网络拓扑

我们在ENSP使用S5700的镜像搭建网络拓扑。使用Cloud桥接自己的主机的指定网卡中。
单台设备配置案例:

一、基础配置
[]内的值推荐读者自行设置。
system-view
sysname [device-name]
vlan [vlan-id]
quit
interface Vlanif [vlan-id]
ip address [ip-address] [mask]
quit
二、SSH登录认证配置
ssh user python 
ssh user python authentication-type password
ssh user python service-type stelnet
user-interface vty 0 4
	authentication-mode aaa
 	user privilege level 15
 	protocol inbound ssh
	quit
aaa
	local-user python password cipher [password]
	local-user python privilege level 15
	local-user python service-type ssh
	return
#别忘了保存配置
save	
y

三、Python程序

1.引入库

代码如下:

import paramiko
import time

2.程序主体

代码如下:

#打开存放交换机IP的文件,注意此文件要与Python程序放置于同一个目录下
ip_context = open('ip_list.txt')
#遍历打开的IP文件中的IP地址
for ip_string in ip_context.readlines()
    #将遍历出来的ip字符串,去除行末空字符。
    ip_strip = ip_string.strip()
    #定义一个变量,paramiko作为客户端赋值给ssh_client,因为SSH基于C/S架构运行
    ssh_client = paramiko.SSHClient()
    #调用一个策略,让Paramiko主动接受来自服务器的公钥。若此处难以理解,可仔细翻阅SSH原理相关资料。
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    '''定义连接选项,调用connect()连接方法。注意此处的ip_strip是变量。username和password
    则是设备改密前的密码。'''
    ssh_client.connect(hostname = ip_strip ,username = 'python', password = 'Python@123')
    #此处输出登录成功纯属为了告知程序观察者paramiko已经成功哪台登录交换机。
    print("成功登陆交换机" + ip_strip )
    #在Server端(此处指代华为服务器)创建一个SSH交互会话。便于后面paramiko向设备发送相关的指令。
    command = ssh_client.invoke_shell()
    #下面几行command.send("string")表示我们所需向设备发送的配置命令。
    command.send("system-view\n")
    command.send("aaa\n")
    command.send("local-user python password cipher Python@123-1\n")
    command.send("return\n")
    command.send("save\n")
    command.send("y\n")
    #以下三行代码主要为了能让脚本在设备中的执行结果完整的打印出来,我们需要让Python程序先休眠1秒。并且以截取65535个字符的输出(65535)是paramiko单次能截取的最大内容数。而decode("ascii")则是让输出更好看。
    time.sleep(1)
    output = command.recv(65535)
    print(output.decode("ascii"))
    #改密完成后关闭Paramiko第一次的SSH连接。
    ssh_client.close()
    #为了本次改密任务的严谨性,我们要重新登录设备用新的密码验证一次。 
    ssh_client_conn_again = paramiko.SSHClient()
    ssh_client_conn_again.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client_conn_again.connect(hostname=ip_strip, username='python', password='Python@123-1')
    #改密登录成功后输出消息。
    print("交换机" + ip_strip + "二次登陆成功,密码修改完成")
    #二次SSH连接结束之后别忘关掉SSH连接,避免占用系统资源。
    ssh_client_conn_again.close()
#关闭打开的“ip_list.txt”文件,避免占用系统资源。
ip_context.close()

3.程序总览

import paramiko
import time

ip_context = open('ip_list.txt')
for ip_string in ip_context.readlines():
    ip_strip = ip_string.strip()
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname = ip_strip ,username = 'python', password = 'Python@123')
    print("成功登陆交换机" + ip_strip )
    command = ssh_client.invoke_shell()
    command.send("system-view\n")
    command.send("aaa\n")
    command.send("local-user python password cipher Python@123-1\n")
    command.send("return\n")
    command.send("save\n")
    command.send("y\n")
    time.sleep(10)
    output = command.recv(65535)
    print(output.decode("ascii"))
    ssh_client.close()
    ssh_client_conn_again = paramiko.SSHClient()
    ssh_client_conn_again.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client_conn_again.connect(hostname=ip_strip, username='python', password='Python@123-1')
    print("交换机" + ip_strip + "二次登陆成功,密码修改完成")
    ssh_client_conn_again.close()
ip_context.close()

运行截图展示:
程序运行部分截图
程序编写思想:
程序的详细注释已经在上文详细叙述。我觉的这个对大量设备进行自动化改密这个需求具体可以划分为几个小任务,而这几个小任务我先用疑问句进行表达。1、如何让python程序登录交换机?2、怎么让python程序批量的执行同一个任务?3、怎么让这个需求更为严谨的执行?我该怎么去验证呢?
而我是这么思考的:
1、对于第一问,首先我们得了解Python哪些模块具备SSH的功能。本篇文章主要使用了Paramiko模块,用到了Paramiko的一些函数。
2、使用for语句可以循环执行一个任务。
3、对于网工来说,我们除了完成工作以外,网络设备的稳定性、安全性、高可靠性等等是和我们息息相关的。在本次让paramiko修改完设备密码之后,为了严谨起见,我们要进行二次登陆验证。

文章仅是基于单个需求整理出的方案。若有相关的建议、更深层次的需求挖掘,希望大家可以留言评论或者私信笔者。感谢大家的支持!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-08 19:16:18  更:2022-06-08 19:20:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 21:38:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码