教你如何使用Python库(telnetlib,paramiko)远程网络设备采集配置
wptr33 2025-01-01 22:57 19 浏览
作为网络工程师,还得学会一门基本的编程语言。作为运营商网络的一名网络工程师,你是如何去对网络设备配置进行备份?
这里介绍三种网络配置备份的方式:
- 1、solarwinds工具对网络设备进行配置备份(需要部署solarwinds)
solarwinds的作用:它是一套非常全面的网络工具库,包括了网络恢复、错误监控、性能监控和管理工具等等。该备份配置的方式缺点是:若需要备份的设备过多,那么打开这个web的就有点慢了。
- 2、通过编写Python脚本的方式去自动备份配置(提倡)
- 3、纯手工自己一台台去show run极其笨的方法(不提倡)
我们讲第2种方式:Python脚本自动采集配置备份
脚本分享:
- telnetlib库:通过telnet协议去登录网络设备,进行配置采集
# -*- coding: UTF-8 -*-
#! /usr/bin/python2.7
import telnetlib, datetime,time
from time import sleep
from multiprocessing import Process
def GO(H, IP,version):
username = 'user'
password = 'passwd'
tn = telnetlib.Telnet(IP)
tn.read_until('username:', timeout=3)
tn.write(username + '\n')
tn.read_until('password:', timeout=3)
tn.write(password + '\n')
file_name = H + '_config_'+str(datetime.date.today()).encode('utf-8')
enable = b'RP/0/RSP0/CPU0:' + H + b'#'
tn.read_until(enable, timeout=3)
if version == 'old':
tn.write('show run | file ftp://xx:xx@172.16.1.2/ftp_upload/%s'%file_name + b'\n')
else:
tn.write('show run | file ftp://xx:xx@172.16.1.2/ftp_upload/%s vrf default'%file_name + b'\n')
time.sleep(60)
tn.close()
#interface_config.close()
print ("%s is OK! Now time is %s" % (H,datetime.date.today()))
t1 = ('D-03-XX-ASR9010', '192.168.1.6', 'old')
t2 = ('D-04-XX-ASR9010', '192.168.1.4','new')
t3 = ('D-05-XX-ASR9010', '192.168.1.5','new')
t4 = ('D-06-XX-ASR9010', '192.168.1.8','new')
t5 = ('D-07-XX-ASR9010', '192.168.1.11','old')
t7 = ('D-08-XX-ASR9010', '192.168.1.17','new')
t8 = ('D-09-XX-ASR9010', '192.168.1.22','new')
t9 = ('D-10-XX-ASR9010', '192.168.1.1','new')
t10 = ('D-11-XX-ASR9010', '192.168.1.210','new')
t11 = ('12-XX-ASR9010','192.168.1.190','old')
t12 = ('13-XX-ASR9010','192.168.1.242','new')
t13 = ('14-XX-ASR9010','192.168.1.250','new')
t14 = ('D-15-XX-ASR9010', '192.168.1.12','old')
hostlist = [t1, t2, t3, t4, t5, t7, t8, t9, t10, t11, t12, t13, t14]
if __name__ == '__main__':
for x in hostlist:
p = Process(target=GO, args=(str(x[0]),str(x[1]),str(x[2]),))
p.start()
sleep(1)
- paramiko库:通过ssh协议去登录网络设备,进行配置采集
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020/4/26 15:18
# @Author : Winnie
# @File : A9K_FTP_UPLOAD_SSH_conf.py.py
# @Software: PyCharm
#Python2
import paramiko
import time,datetime
from time import sleep
import threading
def ssh2(name,ip,version,username,passwd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
ssh_shell = ssh.invoke_shell() #使用invoke是为了可以执行多条命令
print('lall:',ssh_shell.recv(1024))
# for line in ssh_shell.recv(10240):
# print(line)
file_name = name + '_config_' + str(datetime.date.today()) + '_test01'
test1 = 'show run | file ftp://xx:xx@ip/ftp_upload/' + file_name.encode('gb2312') + ' \n'
res = ssh_shell.sendall(test1) # \n 执行一条命令
time.sleep(20)
print(ssh_shell.recv(10240)) #接收到的结果取10240字节
# for m in ssh_shell.recv(10240).split(b'\r\n'):
# print('m:',str(m))
ssh.close()
except :
print('%s\tError\n'%(ip))
if __name__=='__main__':
t1 = ('D-TEST-ASR9010', '172.16.1.2',)
hostlist = [t1]
username = "xxx" # 用户名
passwd = "xxx" # 密码
threads = [10] # 多线程 args=(str(x[0]),str(x[1]),)
for x in hostlist:
print("Begin......",x[0])
a = threading.Thread(target=ssh2, args=(str(x[0]), str(x[1])),username, passwd,))
a.start()
sleep(1)