版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
部署和实施网络自动化引例描述本项目将使用Python编程语言,围绕Python中的telnetlib、paramiko和netmiko模块编写自动化脚本实现网络自动化运维与管理。按照公司的整体网络功能和自动化运维管理的要求,运维部工程师需要完成的任务如下。(1)使用telnetlib模块实现网络配置下发。(2)使用paramiko模块实现网络自动化巡检。(3)使用netmiko模块实现网络拓扑发现。项目任务任务6-1使用telnetlib模块实现网络配置下发任务陈述知识准备任务实施任务陈述随着网络规模的扩大、复杂性的增加,网络运维管理也在发生非常大的变化,一些传统的网络运维技术及管理方式越来越不能满足网络发展及快速、高效运维管理的需求。本任务主要要求读者夯实和理解网络自动化运维必要性、SNMP架构和工作原理、NTP工作原理和工作模式以及telnetlib模块的方法和使用等基础知识,通过使用telnetlib模块自动下发网络配置,掌握Telnet服务配置、NTP服务配置、SNMP配置、Python的基础语法、Python的数据类型、Python的文件处理和telnetlib的使用方法等职业技能,为后续网络自动化运维做好准备。知识准备1.1自动化运维简介1.2telnetlib模块1.1自动化运维简介在工作中你是否遇到过这样的场景:设备升级:现网有数千台网络设备,你需要周期性、批量性地对设备进行升级。配置审计:企业年度需要对设备进行配置审计。例如要求所有设备开启sTelnet功能,以太网交换机配置生成树安全功能。你需要快速地找出不符合要求的设备。配置变更:因为网络安全要求,需要每三个月修改设备账号和密码。你需要在数千台网络设备上删除原有账号并新建账号。传统的网络运维工作需要网络工程师手动登录网络设备,人工查看和执行配置命令,肉眼筛选配置结果。这种严重依赖“人”的工作方式操作流程长,效率低下,而且操作过程不易审计。网络设备经典运维场景设备多!操作烦琐!效率低!1.1自动化运维简介网络自动化,通过工具实现网络自动化地部署、运行和运维,逐步减少对“人”的依赖。这能够很好地解决传统网络运维的问题。业界有很多实现网络自动化的开源工具,例如Ansible、SaltStack、Puppet、Chef等。从网络工程能力构建的角度考虑,更推荐工程师具备代码编程能力。PythonChefAnsible网管工具自动化脚本SaltStackShell网络自动化关键词1.1自动化运维简介近几年随着网络自动化技术的兴起,以Python为主的编程能力成为了网络工程师的新技能要求。Python编写的自动化脚本能够很好的执行重复、耗时、有规则的操作。网络自动化能做什么?最直观的一个网络自动化例子就是自动化配置设备。我们可以把这个过程分为两个步骤:编写配置文件和编写Python代码将配置文件推送到设备上。首先用命令行方式写配置脚本,然后通过Telnet/SSH将它传到设备上运行。这种方式对于初学网络编程与自动化的网络工程师来说,比较容易理解。本章节主要介绍这种方式实现网络自动化。网络设备举例:Python实现设备自动化配置SysnameSW1Vlan10descriptionAVlan20descriptionBVLAN30descriptionC配置文件SSH/TelnetPython文件1.1自动化运维简介Python是一门完全开源的高级编程语言。它的作者是GuidoVanRossum。由于Python具有非常丰富的第三方库,加上Python语言本身的优点,所以Python可以在非常多的领域内使用:人工智能、数据科学、APP、自动化运维脚本等。Python的优点:Python拥有优雅的语法、动态类型具有解释性质。能够让学习者从语法细节的学习中抽离,专注于程序逻辑。Python同时支持面向过程和面向对象的编程。Python拥有丰富的第三方库。Python可以调用其他语言所写的代码,又被称为胶水语言。Python的缺点:运行速度慢。Python是解释型语言,不需要编译即可运行。代码在运行时会逐行地翻译成CPU能理解的机器码,这个翻译过程非常耗时。1.1自动化运维简介Python程序编译运行的过程操作过程1、在操作系统上安装Python和运行环境。2、编写Python源码。3、编译器运行Python源码,编译生成pyc文件(字节码)。4、Python虚拟机将字节码转换为机器语言。5、硬件执行机器语言。编译器pyc文件(字节码)Python虚拟机运行Python源码1.1自动化运维简介Python有两种运行方式,交互式运行和脚本式运行。交互式编程不需要创建脚本文件,是通过Python解释器的交互模式编写代码。C:\Users\Richard>pythonPython3.7.4(default,Aug92019,18:34:13)[MSCv.191564bit(AMD64)]::Anaconda,Inc.onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>print("helloworld")helloworld>>>a=1>>>b=2>>>print(a+b)3>>>1.Input--2.Output--3.Input--4.Input--5.Input--6.Output--1.1自动化运维简介脚本模式中的代码可以在各种Python编译器或者集成开发环境上运行。例如Python自带的IDLE、Atom、VisualStudio、Pycharm和Anaconda等。demo.py文件print("helloworld")a=1b=2print(a+b)C:\Users\Richard>pythondemo.pyhelloworld3编写Python脚本文件(.py)执行脚本文件121.Input--2.Output--3.Output--1.2telnetlib模块在Python项目开发过程中,功能需求会越来越多,从而代码也会越来越多,如果所有的代码全部写在一个.py的Python文件里面,代码可读性很差,也不容易维护。因此,Python提出了模块的概念。如果将一些经常使用的函数存储到与主程序分离的文件中,在任何程序中都可以调用,则使用起来会更加方便,在Python中,这种文件就称为模块。对于模块我们可以使用import或者from...import语句引入模块。本任务中,涉及的模块主要有elnetlib模块。1.2telnetlib模块telnetlib是Python标准库中的模块。它提供了实现Telnet功能的类telnetlib.Telnet。这里通过调用telnetlib.Telnet类里的不同方法实现不同功能。fromtelnetlibimportTelnettn=Telnet(host=None,port=0[,timeout])tn.read_all()…导入telnetlib模块Telnet类--Telnet连接到指定服务器上--调用read_all()方法--方法功能Telnet.read_until(expected,timeout=None)读取直到给定的字符串expected或超时秒数。Telnet.read_all()读取所有数据直到EOF(EndOfFile)。阻塞直到连接关闭。Telnet.read_very_eager()读取从上次IO阻断到现在所有的内容,返回字节串。连接关闭或者没有数据时触发EOFError异常。Telnet.write(buffer)写入数据。在套接字(Socket)上写一个字节串,加倍任何IAC(InterpretAsCommand)字符。Telnet.close()关闭连接。1.2telnetlib模块案例:使用telnetlib登陆设备现有一台网络设备作为Telnet服务器,需要实现使用Pythontelnetlib作为Telnet客户端登录此设备。实现过程分为四个步骤:配置设备Telnet服务。手动验证和查看Telnet登录步骤,作为代码实现的参考。编写和运行Python代码。验证结果。GE1/0/1000Telnet服务器Telnet客户端配置设备Telnet查看Telnet登陆步骤编写Python代码结果验证1.2telnetlib模块[Huawei]user-interfacevty04[Huawei-ui-vty0-4]authentication-modepassword[Huawei-ui-vty0-4]setauthenticationpasswordsimpleHuawei@123[Huawei-ui-vty0-4]protocolinboundtelnet[Huawei-ui-vty0-4]userprivilegelevel15[Huawei-ui-vty0-4]quit[Huawei]telnetserverenable[Huawei]interfaceGE1/0/0[Huawei-GE1/0/0]ipadd024[Huawei-GE1/0/0]quitGE1/0/1000Telnet服务器Telnet客户端配置设备接口地址:配置设备Telnet服务:配置设备Telnet查看Telnet登陆步骤编写Python代码结果验证1.2telnetlib模块C:\Users\Richard>telnet0LoginauthenticationPassword:Info:ThemaxnumberofVTYusersis5,andthenumberofcurrentVTYusersonlineis1.Thecurrentlogintimeis2020-01-1521:12:57.<Huawei>GE1/0/1000Telnet服务器Telnet客户端Telnet登录操作:登录命令--
回显信息--输入密码--回显信息--12配置设备Telnet查看Telnet登陆步骤编写Python代码结果验证1.2telnetlib模块importtelnetlibhost='0'password='Huawei@123'tn=telnetlib.Telnet(host)tn.read_until(b’Password:’)tn.write(password.encode('ascii')+b"\n")print(tn.read_until(b'<Huawei>').decode('ascii’))tn.close()GE1/0/1000Telnet服务器Telnet客户端导入模块定义登录设备IP定义登录设备密码Telnet登录到主机读取直到回显信息为”Password:”
输入编码为ASCII的密码并换行输出读取直到到”<Huawei>”的信息关闭Telnet连接配置设备Telnet查看Telnet登陆步骤编写Python代码结果验证--
--------------1.2telnetlib模块#编译器运行Python代码Info:ThemaxnumberofVTYusersis5,andthenumberofcurrentVTYusersonlineis1.Thecurrentlogintimeis2020-01-1522:12:57.<Huawei>配置设备Telnet查看Telnet登陆步骤编写Python代码手动Telnet登录结果:C:\Users\Richard>telnet0LoginauthenticationPassword:Info:ThemaxnumberofVTYusersis5,andthenumberofcurrentVTYusersonlineis1.Thecurrentlogintimeis2020-01-1521:12:57.<Huawei>结果验证Python代码运行结果:任务实施工程师需要完成的任务如下。(1)手动在路由器SZ1和SZ2,交换机S1、S2和S4上配置Telnet服务,Telnet登录用户名为python,密码为Huawei12#$。(2)使用telnetlib在所有路由器和交换机上配置运维用户,用户级别为1,用户名为yunwei_001,密码为Huawei@123(3)手动配置ISP路由器作为NTP的时钟源,使用IP地址为,配置路由器SZ2作为深圳总部园区网络和服务器区网络所有设备的NTP服务器,IP地址是,使用telnetlib在所有路由器和交换机下发NTP配置,与其进行时间同步。(4)使用telnetlib在所有路由器和交换机上配置SNMPv3,SNMPv3用户名为user01,所属组名为group01,鉴别方式为SHA,鉴别密码为Huawei@123,加密方式为AES128,加密密码为Huawei@123。1.提供了USM的认证加密和VACM的SNMP版本是()。A.v3 B.v2 C.v2c D.v12.在使用telnetlib模块时传递的是()。A.列表 B.字符串 C.字典 D.字节串3.NTP工作模式有()。A.组播模式 B.对等体模式C.广播模式 D.单播客户端/服务器模式4.Python在文件处理时需要下面()步骤。A.打开文件 B.文件读写操作 C.关闭文件 D.保存文件5.Python中,下面()数据类型是不可变类型。A.数字(Number) B.字符串(String)C.元组(Tuple) D.字典(Dict)任务6-2使用paramiko模块实现网络自动化巡检任务陈述知识准备任务实施任务陈述本任务主要要求读者夯实和理解网络设备巡检的意义和任务、paramiko模块功能和组件、SSHClient类和SFTPClient类等基础知识,通过使用paramiko模块实现自动化巡检,掌握网络基本信息的收集、设备运行状态信息的收集、SSH服务的配置和paramiko模块的使用方法等职业技能,为后续网络自动化运维做好准备。知识准备2.1Paramiko模块2.1Paramiko模块Paramiko简介Paramiko是Python语言编写的支持以加密和认证方式,进行远程控制模块;它遵循SSH2协议,使用Paramiko可以方便地通过SSH协议执行远程主机的程序或脚本。Paramiko有两个重要的基础类:Channel类和Transport类。Channel类:是对SSH2Channel的抽象类,作用类似于套接字(Socket),是SSH传输的安全通道。常用的方法有:execcommand()、exit_status_ready()、recv_exit_status()、close()等。Transport类:是核心协议的实现类,是一种加一个加密的流隧道。常用的方法有:send()、recv()、close()等密的会话,使用时会同步创建。2.1Paramiko模块Paramiko核心组件SSHClient类SSHClient类封装了Transport类、Channel类及SFTPClient类,通常用于执行远程命令。常用的方法有connect、exec_command、set_missing_host_policyconnect方法用于实现远程SSH连接并进行校验。其中,hostname(str类型)参数表示连接的目标主机地址;port(int类型)参数表示连接目标主机的端口,默认为22;username(str类型)参数表示校验的用户名(默认为当前的本地用户名);password(str类型)参数表示密码用于身份校验或解锁私钥;timeout(float类型)参数表示连接超时时间(以秒为单位),为可选项。connect(hostname,port=22,username=None,password=None,timeout=None)2.1Paramiko模块Paramiko核心组件(续)SSHClient类exec_command方法为远程命令执行方法,该命令的输入与输出流为标准输入(stdin)、输出(stdout)、错误(stderr)的Python文件对象。其中,command(str类型)参数表示执行的命令串;bufsize(int类型)参数表示文件缓冲区大小,默认为-1(不限制)。load_system_host_keys方法用于加载本地公钥校验文件。其中,filename(str类型)参数指定远程主机公钥记录文件。exec_command(command,bufsize=-1,timeout=None)load_system_host_keys(self,filename=None)2.1Paramiko模块Paramiko核心组件(续)SSHClient类(续)set_missing_host_policy方法用于设置连接的远程主机没有主机密钥或HostKeys对象时的策略,目前支持三种,分别是AutoAddPolicy、RejectPolicy(默认)、WarningPolicy,仅限用于SSHClient类。其中,AutoAddPolicy,目标添加主机名及主机密钥到本地HostKeys对象,并将其保存,不依赖load_system_host_keys()的配置;RejectPolicy,自动拒绝未知的主机名和密钥,依赖load_system_host_keys()的配置;WarningPolicy,用于记录一个未知的主机密钥的Python警告,并接收它,功能上AutoAddPolicy相似,但未知主机会有告警。invoke_shell方法在SSH服务端创建一个交互式的shell。set_missing_host_policys(AutoAddPolicy/RejectPolicy/WarningPolicy/)invoke_shell()2.1Paramiko模块Paramiko模块核心组件SFTPClient类SFTPClient封装了SFTP客户端,主要用来实现执行远程文件操作(文件上传、下载、修改文件权限等)。常用的方法有:from_transport、put和get。from_transport方法用来创建一个已连通的SFTP客户端通道。其中,t(transport)参数表示一个已通过验证的传输对象。put方法用于上传本地文件到远程SFTP服务端。其中,localpath(str类型)参数表示需上传的本地文件(源);remotepath(str类型)参数表示远程路径(目标);callback(funcation(int,int))参数表示获取已接收的字节数及总传输字节数,以便回调函数调用,默认为None;confirm(bool类型)参数表示文件上传完毕后是否调用stat()方法,以便确认文件的大小。from_transport(cls,t)put(localpath,remotepath,callback=None,confirm=True)2.1Paramiko模块Paramiko核心组件SFTPClient类(续)SFTPClient封装了SFTP客户端,主要用来实现执行远程文件操作(文件上传、下载、修改文件权限等)。常用的方法有:from_transport、put和get。get方法用于从远程SFTP服务端下载文件到本地。其中,remotepath(str类型)参数表示需要下载的远程文件(源);localpath(str类型)参数表示本地路径(目标);callback(funcation(int,int)),获取已接收的字节数及总和传输字节数,以便回调函数调用,默认为None。get(remotepath,localpath,callback=None)2.1Paramiko模块Paramiko模块安装在使用Python编程的过程中,我们会经常用到第三方库包,而pip作为Python最优秀的包管理工具之一,可以方便Python库包的安装管理。Python2.7.9以上或Python3.4以上版本自带pip工具,在命令行中输入【pip--version】命令,如果有相关的版本信息,则说明pip工具已经安装,可以直接使用。安装完成后,进入Python解释器,导入Paramiko模块,如果没有报错,就说明Paramiko模块安装成功。pipinstallparamikoPythonimportparamiko2.1Paramiko模块Paramiko应用举例使用SSHClient连接并配置交换机importparamikoimporttimeip="1"username="admin"password="Huawei@123"\\创建交换机登陆信息变量ssh=paramiko.SSHClient()\\创建SSH对象ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\\允许连接不在know_hosts文件中的主机ssh.connect(hostname=ip,port=22,username=username,password=password)\\SSH方式连接交换机print("成功连接",ip)2.1Paramiko模块Paramiko应用举例(续)使用SSHClient连接并配置交换机(续)command=ssh.invoke_shell()\\调用交换机命令行command.send("sys\n")command.send("sysnameHW_Switch\n")command.send("interfaceloopback0\n")command.send("ipaddress24\n")command.send("return\n")command.send("save\n")command.send("y\n")\\发送配置命令time.sleep(3)output=command.recv(65535)print(output)\\设置等待时间并打印回显内容ssh.close()\\关闭连接通过SSH方式成功连接交换机后,我们需要调用paramiko.SSHClient()下面的invoke.shell()来唤醒shell,也就是华为交换机的VRP命令行,并将它赋值给变量command,之后调用invoke.shell()下面的command()函数,向交换机发送配置命令。Python是一次性执行脚本命令的,中间没有时间间隔,这样就会导致某些命令遗漏和回显内容不完整的问题。我们在使用recv()函数将回显结果保存之前,需要调用time模块下的sleep()函数手动让Python停止3秒钟,这样回显内容才能被完整地打印出来。这里的command.recv(65535)中的65535代表截取65535个字符的回显内容。对交换机配置完毕后,使用close()方法退出SSH连接。2.1Paramiko模块Paramiko应用举例使用SFTPClinent上传和下载文件importparamiko\\导入paramiko模块tran=paramiko.Transport("0",22)\\获取Transport实例tran.connect(username="root",password="Huawei@123")\\连接远程服务器print("连接成功")sftp=paramiko.SFTPClient.from_transport(tran)\\获取SFTPClient实例put_localpath="D:/Python/upload/upload.py"put_remotepath="/home/upload“\\设置上传的本地/远程文件路径变量2.1Paramiko模块Paramiko应用举例(续)使用SFTPClinent上传和下载文件(续)get_remotepath='/home/download/download.py’get_localpath='D:/Python/download’\\设置下载的本地/远程文件路径变量sftp.put(put_localpath,put_remotepath)\\执行上传动作并上传文件到远程服务器sftp.get(get_localpath,get_remotepath)\\执行下载动作并从远程服务器下载文件tran.close()\\关闭通道任务实施工程师需要完成的任务如下。(1)配置SSH服务端。(2)使用paramiko登录设备。(3)自动执行网络巡检的各项命令。1.下面()命令可以检查设备运行状态。A.displaycpu-usage B.displayplatformC.displaydevice D.displaydiaglog2.在检查CPU状态时,如果出现CPU占用率长时间超过(),建议重点关注。A.60% B.70% C.90% D.80%3.SSH支持下面()验证方式。A.密码验证 B.密钥验证 C.指纹验证 D.一次性验证4.paramiko模块组件中常见协议类有()。A.SSHClient B.SFTPClient C.Transport D.Channel5.paramiko模块组件中密钥相关类有()。A.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47637.3-2026数据中心和电信中心机房安装的信息和通信技术(ICT)设备用直流器具耦合器第3部分:AC/DC器具输入插座
- GB/T 47792.1-2026自动液体处理系统第1部分:术语和通用要求
- 2026文化培育面试题库及答案
- 2026武威医院面试题及答案解析
- 2026线上聊天面试题及答案
- 2026消化科面试题及答案详解
- 拔罐诊疗中高频医保违规总结2026
- 药房店员药品培训试题及答案
- 钢材购销合同(范本)
- 2026年AI招聘筛选系统:简历分析与视频面试评估功能实现
- 2026年度全国教师入编考试教育公共基础知识复习题库及答案(共50题)
- 2026汇能控股集团有限公司内蒙古卓正煤化工有限公司人才招聘33人备考题库含答案详解
- 华为基本法(更新)
- 城市基础设施应急抢修方案
- 神经源膀胱功能训练技术
- 广西主要树种地径测算蓄积量工作手册(2025 正式版)
- 2025年压力容器检验员资格考试试卷(压力容器检验员压力容器检验员压力容器检验员安全知识考核篇)
- TCTBA 001-2019 非招标方式采购代理服务规范
- 人教PEP版(2024)三年级上册英语Unit 5《The colourful world》单元作业设计
- 梦境心理学:探索潜意识的奥秘
- 2023年山东聊城职业技术学院招聘工作人员60人(第二批)笔试参考题库(共500题)答案详解版
评论
0/150
提交评论