【NetDevOps】paramiko - 自动保存华为设备配置文件

拓扑图

【NetDevOps】paramiko - 自动保存华为设备配置文件

前置工作

  1. 路由器、交换机基础配置

    1.交换机、路由器配置ssh server
     用户名:admin
     密码:admin123
    2.PC上安装python3, 并使用pip安装paramiko模块
        pip3 install paramiko
  2. PC上运行ftp服务器;这里使用centos7,运行vsftpd服务,ip地址为192.168.164.133 。
1. 安装vsftpd服务
    yum install -y vsftpd
2. 启动vsftpd服务
    systemctl start vsftpd
  1. 服务开启后,进行连接测试,使用本地用户admin进行连接

语法:ftp 192.168.164.133
【NetDevOps】paramiko - 自动保存华为设备配置文件

  1. 在交换机上查看配置文件信息

命令:dir
vrpcfg.zip 文件就是我们需要的配置文件
【NetDevOps】paramiko - 自动保存华为设备配置文件

  1. 手动上传配置文件测试

先登录到ftp服务器
【NetDevOps】paramiko - 自动保存华为设备配置文件
使用put命令上传配置文件,语法:put vrpcfg.zip
【NetDevOps】paramiko - 自动保存华为设备配置文件

  1. 在centos7查看,配置文件接收情况
    可以修改文件名和存放目录,后面我们在脚本里做这个工作。
    【NetDevOps】paramiko - 自动保存华为设备配置文件

脚本

在Linux中创建脚本paramiko_ftp.py ,将ip地址信息写在 iphost.txt 文件中,放在脚本同目录

import paramiko
import time
import getpass
import os

#输入SSH登录信息
username=input(‘user:‘)
password=getpass.getpass(‘password:‘)

#打开ip列表文件
iphost=open(‘iphost.txt‘,‘r‘)

#创建两个空列表,用于后面存放出现连接超时错误和登录信息错误的设备信息
timeout_list=[]
auth_error_list=[]

#检查当前日期命名的文件夹是否存在,不存在就创建
Day = time.strftime(‘%Y-%m-%d‘,time.gmtime())
if os.path.exists(‘/home/admin/‘+str(Day)+‘/‘) is not True:
  os.mkdir(‘/home/admin/‘+str(Day)+‘/‘)

#用for循环读取ip列表
for line in iphost.readlines():
  #去除头尾的空格、换行符
  ip=line.strip()

  #try内写正常执行的语句
  try:
    #调用paramiko的SSHClient()方法,赋予变量ssh
    ssh=paramiko.SSHClient()

    #自动接受来自未保存主机的密钥
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    #调用connect()方法进行ssh登录
    ssh.connect(hostname=ip,username=username,password=password)

    #打印连接成功信息
    print(‘已连接‘+ip)

    #调用paramiko.SSHClient()的connect()方法,唤醒shell,赋值给变量command
    command=ssh.invoke_shell()

    #调用invoke_shell()的send()函数,向设备发送指令
    command.send(‘ftp 192.168.164.133 \n‘)
    command.send(‘admin\n‘)    #这里是ftp用户名,注意末尾不要有空格
    command.send(‘admin\n‘)    #ftp的密码,用的是linux的本地用户登录信息
    time.sleep(2)              #休眠2s,等待ftp连接
    command.send(‘put vrpcfg.zip \n‘)   #put命令,上传配置文件
    command.send(‘quit \n‘)

    #修改配置文件在Linux的保存目录和文件名
    os.rename(src=‘/home/admin/vrpcfg.zip‘,dst=‘/home/admin/‘+str(Day)+‘/‘+‘hw‘+str(ip[8:])+‘-vrpcfg.zip‘)

    #调用time模块sleep()函数,手动休眠1s,目的是等待设备回显内容输出,方便后面打印完整回显内容
    time.sleep(1)

    #调用invoke_shell()的recv()函数,截取回显结果,一次最多65535字符
    output=command.recv(65535)
    #打印回显结果,用utf-8解码
    print(output.decode(‘utf-8‘))

  #错误类型一,账号密码认证失败;打印并在列表中增加连接失败的ip地址  
  except paramiko.ssh_exception.AuthenticationException:
    print(‘认证失败‘,ip)
    auth_error_list.append(ip)
  #错误类型二,连接超时;打印并在列表中增加连接失败的ip地址
  except TimeoutError:
    print(‘连接超时‘,ip)  
    timeout_list.append(ip) 

#关闭ip列表文件       
iphost.close()
#调用paramiko.SSHClient()的close方法,退出ssh连接
ssh.close

#如果列表不为空,打印出来连接失败的设备
if timeout_list:
  print(‘以下设备连接超时:‘)
  for i in timeout_list:
    print(i)
if auth_error_list:
  print(‘以下设备认证失败:‘)
  for i in auth_error_list:
    print(i)

运行脚本
python3 paramiko_ftp.py

Linux终端 上传成功的提示信息示例
【NetDevOps】paramiko - 自动保存华为设备配置文件
在Linux上检查配置文件保存情况
【NetDevOps】paramiko - 自动保存华为设备配置文件
后续可以用 crontab -e 命令,添加定时任务,定时自动备份文件

【NetDevOps】paramiko - 自动保存华为设备配置文件

上一篇:linux安装nodejs和环境配置


下一篇:ArcGis for js React 初始化安装