当前位置: 首页 > news >正文

自动化网络部署(paramiko,Netmiko)

本章需要又一定的网络构建基础经验,以及一定的python编程能力

实验一:读取文件并输入路由器

前提:路由器开启ssh并和虚拟机处于同一网段

写好两个配置文件(命令文件不展示了和正常一样)

机器配置文件:本质就是双层字典

mport paramiko
import time
import json

with open('jq.json','r') as fn_jq:
    devices = json.load(fn_jq)  //以字典形式读取json文件


with open('pz.txt','r') as fn_pz:
    commands = fn_pz.readlines()  //按行读取pz文件

username = 'admin'
password = 'admin'

核心理念:

双层for循环 第一层循环需要配置的路由器,第二层是每个路由器需要输入的命令

以下配置只能让所有路由器输入一样的命令(下节出不同路由器不同配置)

for device in devices:  
    print(f'{device} is now')
    conn = paramiko.SSHClient() //创建连接实例
    conn.set_missing_host_key_policy(paramiko.AutoAddPolicy())//接受不在本地的主机
    conn.connect(devices[device]['ip'],username=username,password=password)//依次输入sever ip ,ssh用户名和密码
    new_conn = conn.invoke_shell() //创建ssh终端 并保持连接
    for command in commands:  //循环配置命令文件
        new_conn.send(command.encode('utf-8'))  //使用utf-8格式输入
        time.sleep(2)  //间隔时间2s
    output = new_conn.recv(5000)  //使用ouput接收提示信息
    print(output.decode())  
    new_conn.close()  //关闭连接会话

Netmiko:

Netmiko库是基于paramiko ssh库开发的一个模块,简化了对网络设备的SSH管理。

该库的用途如下:

  • 建立设备的连接
  • 简化show命令的实行和输出数据的检索
  • 简化配置命令的执行,包括可能的提交操作
  • 可在广泛的网络供应商和平台商执行上述操作

1、简单实例

(1)执行查看命令show ip interface brief

首先还是开始ssh并保证路由器和虚拟机在同一网段

from netmiko import ConnectHandler

devices = {   

    'device_type': 'cisco_ios',

    'host': 'R1',

    'ip': ' 192.168.164.178',

    'username': 'admin',

    'password': 'admin',

}

net_conn = ConnectHandler(**devices)  //建立连接(**是提取字典的值)

current_prompt = net_conn.find_prompt()  # 提取设备的提示符(命令的前缀 R1#之类的)

print(f'{current_prompt}sh ip int b')

output = net_conn.send_command('sh ip int b')  //output来接收返回信息

print(output)

实验二:向路由器输入巡检命令远程监测路由器状态

首先构建连接路由器的配置文件

from  netmiko import  ConnectHandler
from  devices_list import  devices  //将配置文件的列表导入本文件


with open('commands','r') as fn_command:
    commands = fn_command.readlines()  //将命令文件读取到commands(列表形式)

for device in  devices:  //核心思想和paramiko一样
    conn = ConnectHandler(**device)
    tsf = conn.find_prompt()
    filename = f'{device["host"]}_xj'
    with open(filename, 'w') as fn:
          print(f'正在收集{device["host"]}的信息')
          for command in commands:
            output = conn.send_command(command)
            fn.write(f'{tsf}')   
            fn.write(command)
            fn.write(output)  //将收集到的信息配置命令提示符全部写入指定文件
    print(f'{device["host"]}的信息收集完成!!')
    print()

最后通过文件查看巡检结果

实验三:向路由器输入配置命令实现自动化部署

第一步同上:

配置文件自己随便写

from fileinput import filename

from netmiko import  ConnectHandler
from  devices_list import devices

for device in  devices:
    conn = ConnectHandler(**device)
    tsf = conn.find_prompt()
    filename = f'{device["host"]}_config'  //获取配置文件名
    with open(filename,'r') as fn:
        command = fn.readlines()
        conn.send_config_set(command)  //将整个列表输入进路由器
    print(f'{device["host"]}配置完成')
    conn.disconnect() //关闭连接

最后在路由器上查看配置命令是否成功


 


http://www.mrgr.cn/news/60344.html

相关文章:

  • 【Vulnhub靶场】DC-2
  • 【进阶】面向对象之(静态)内部类
  • Chromium HTML5 新的 Input 类型search对应c++
  • 前端学习---(6)js基础--4
  • 从零实现数据结构:一文搞定所有排序!(下集)
  • 要用PHP开发一个网页,允许用户暂定以1元人民币兑换EACO,并根据EACO价格波动兑换中东国家的货币
  • Linux CentOS7下创建SFTP服务器
  • 牛客周赛65(C++实现)
  • 探秘计算机网络:网络流量分析与 TCP 标志位解析
  • 1.机器人抓取与操作介绍-深蓝学院
  • 匹配正确率提升187.9%!华中科技大学CGCL实验室用自监督学习助力胶囊内窥镜图像拼接,「天眼」里也可看肠胃健康
  • 【yashandb】初体验
  • matlab实现了一个基于粒子群优化(PSO)算法的程序,用于寻找一种三层材料结构的最佳配置
  • 遗传算法与深度学习实战(20)——使用进化策略自动超参数优化
  • Django+Vue全栈开发项目入门(二)
  • 09DSP学习-F28379D发送浮点数 Vofa+接收数据 使用JustFLoat数据引擎
  • 中科院分区表能不能查SSCI分区?该怎么查?
  • 队列的实现(单链表)
  • 重采样方法(交叉验证法)——基于glm与LOOCV法(Weekly数据集分析)
  • C++-继承
  • 快速上手 Rust——环境配置与项目初始化
  • 天地图实现海量聚合marker--uniapp后端详细实现
  • 2024年推荐最详解析项目管理平台与敏捷开发的五个阶段
  • Redis内部数据结构Dict结构详解
  • DevTools 中的新滚动徽章
  • mac下使用docker安装php7.4环境