本次实验的目的:执行python脚本,实现自动远程Telnet连接到指定的路由器or交换机,执行指定的命令。之后将执行的日志保存在和python脚本相同的目录中,该日志的命名形式:设备名+日期+时间.txt。
首先,不得不承认Telnet已经非常落伍,明文传输导致该协议的安全性非常脆弱,用抓包软件可以一目了然看见所有执行了的命令,但今天只是简单的介绍学习,对新手还是会有所帮助的。
本次实验使用的是python3,教程适用对象:初学python的网络工程师。
路由器上的配置:
IP地址:192.168.1.200
username ljds password 0 ljds
enable secret ccie
line vty 0 4
login local
先手动Telnet路由器测试:
手动Telnet
手动Telnet没有问题,开始使用Python:
使用Telnet需要使用telnetlib模块。要将日志文件以设备名+日期时间的方式命名,所以我用了正则表达式re去匹配设备名,使用time获取时间。因此,总共调用3个模块。
所有代码如下:
############################
import telnetlib
import time
import re
LogTime = time.strftime('%Y-%m-%d_%H-%M-%S') #格式化时间,效果:2017-01-16_22-18-59
Host = '192.168.1.200'
CMD = 'show run' #执行的命令
UserName = 'ljds'
PassWord = 'ljds'
tn = telnetlib.Telnet(Host) #连接服务器
tn.write(UserName.encode())
tn.write(b'\n')
tn.write(PassWord.encode())
tn.write(b'\n')
tn.write('enable'.encode())
tn.write(b'\n')
tn.write('ccie'.encode())
tn.write(b'\n')
tn.write('terminal length 0'.encode())
tn.write(b'\n')
tn.write(CMD.encode())
tn.write(b'\n')
telreply = tn.expect([],timeout=1)[2].decode().strip() #将之前的信息放在telreply里。
DeviceName = re.search('.*(?=#show run)',telreply).group()#用正则表达式匹配设备名字
tn.close() #断开连接
log = open(DeviceName + '-' + LogTime + '.txt','w')
log.write(telreply)
log.close()
############################
这些代码写在Telnet_ljds.py中,现在执行这个Telnet_ljds.py文件,就会发现当前目录下已经多了一个.txt的日志文件,刚才show run的所有信息就都在里面了。
执行结果
巡检日志
今天是我第一次在今日头条上发表文章,写的比较草率。上面的内容比较简单,也很死板,只执行了一个show run,下次会使用函数的形式重新写Telnet进行设备巡检,并且可以执行多条命令。之后再写ssh协议远程连接网络设备(或者服务器)。
希望对初学python的同学(运维工程师)有所帮助。