网络设备自动备份工具 Oxidized 使用体验

article/2025/9/25 17:05:51

Oxidized 是一个使用 Ruby 编写的开源网络设备配置备份工具,是 RANCID(思科的一个工具) 的替代品,轻量级且可扩展的 Oxidized 支持 130 多种操作系统。

体验一下它的功能以及各种实现,看如何能与现有的系统进行整合,或者用 Python 造个简单的轮子。

结论:

  1. 整体使用感受:作为一个专门的配置备份软件,可以说把一个功能做到了比较高的水平!

  2. 亮点功能:可以支持监听设备上报的 syslog 日志中的配置改动来触发配置文件备份,对我来说是一个新的思路

    目前支持 ios、junos、eos、nsos、aruba,后面有时间可以验证一次。

  3. 很多实现细节没有体验,大致过了一遍文档

安装过程

拉取镜像

docker pull oxidized/oxidized

配置文件相关

创建目录,用来存放配置文件、备份的配置、运行日志、主机清单文件等等

mkdir /etc/oxidized

运行一次容器,让程序自动生成初始配置文件,--rm 参数为容器退出后自动删除该容器:

docker run --rm -v /etc/oxidized:/root/.config/oxidized -p 8888:8888/tcp -t oxidized/oxidized:latest oxidized

回显信息为:edit ~/.config/oxidized/config,说明已经生成了默认的配置文件。

编辑配置文件,oxidized 的配置文件是 yaml 格式的,详细的配置项Configuration,提供了多种灵活的数据继承的方法,即可以为每台、每组、每种设备等等进行不同的配置。

---
username: oxidized    # 值随意,以数据库为准
password: S3cr3tx     # 值随意,以数据库为准
model: junos          # 值随意,以数据库为准
interval: 3600        # 配置备份的间隔时间
log: ~/.config/oxidized/log   # 日志文件
debug: false
threads: 30   # 线程
timeout: 20   # 超时时间
retries: 3    # 失败重试次数
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/    # 登录设备后的提示符判断
crash:directory: ~/.config/oxidized/crasheshostnames: false
rest: 0.0.0.0:8888    # 前端界面
pid: ~/.config/oxidized/oxidized.pid
input:    # 连接方式default: ssh, telnetdebug: falsessh:secure: false
output:default: git      # 以git方式存储git:user: Oxidizedemail: oxidized@example.comrepo: "~/.config/oxidized/oxidized.git"
source:default: csvcsv:file: ~/.config/oxidized/router.db  # CSV 格式的主机数据库delimiter: !ruby/regexp /:/map:name: 0     # CSV 里面的值映射关系ip: 1model: 2username: 3password: 4group: 6vars_map:enable: 5
groups:             # 为每个组进行单独的配置mikrotik:username: adminpassword: blankubiquiti:username: ubntpassword: ubnt
model_map:            # 为每种设备类型进行单独的配置cisco: iosusername: adminpassword: passwordjuniper: junosironware:username: adminpassword: passwordvars:enable: enablepassword

router.db 主机数据库,默认是 CSV 格式,也支持通过 SQL 、SQLite、HTTP 等方式来拉取,最终的数据结构根据不同的来源进行处理,然后重点是主机清单里面的数据,要通过 mapvar_map 建立对应的映射关系,这里是配置文件可以灵活制定的关键。

具体每种来源的配置方式:Sources。

以 CSV 格式为例,应当是以下格式,默认是以 : 为分隔符,最终结果是个列表,然后映射值时根据下标:

r1:192.168.56.20:comware:netdevops:NetDevops@01:enable_pass:group1
r2:192.168.56.21:comware:netdevops:NetDevops@01:enable_pass:group2
r3:192.168.56.23:comware:netdevops:NetDevops@01:enable_pass:group2

运行

运行容器,将本地数据卷映射到容器内的指定目录,容器内部默认监听 8888 端口:

docker run -td \--name oxidized_1 \--restart=always \-v /etc/oxidized:/root/.config/oxidized \-p 8888:8888/tcp \oxidized/oxidized:latest \oxidized

程序输出

配置输出:

  1. 以文件的方式存储

    需要手动创建父目录 configs,每个设备一个配置文件,只保留最新的配置,不会保存历史配置。

    默认为每个组建立一个文件夹。

    每次会在原文件的基础上更新文件,不会保存历史。

  2. 以 git 的方式存储,默认为每个组创建一个 git 仓库,可以通过 single_repo: true 来配置使用同一个仓库,此时每个组为一个文件夹。

    oxidized 默认创建的的是 bare repo(What is a bare git repository?),相当于一个私有的 git 仓库,里面没有 git 的工作目录,只有版本文件,每次备份配置后会进行一次提交;本地的私有仓库,可以通过克隆来查看具体的备份文件。

    例如,我这里有一个 default.git 的目录,是上面 router.db 里面几台主机的配置备份信息:

    image-20220427225051583

    如果要查看具体的文件,可以克隆这个仓库:

    git clone /etc/oxidized/default.git my_config
    

    image-20220427225210786

    如果要把文件提交到远程仓库,可以在配置文件中添加 hooks 来实现,例如:

    hooks:push_to_remote:type: githubrepoevents: [post_store]  # 发生改变时触发操作remote_repo:routers: git@git.intranet:oxidized/routers.gitswitches: git@git.intranet:oxidized/switches.gitfirewalls: git@git.intranet:oxidized/firewalls.gitpublickey: /root/.ssh/id_rsa.pubprivatekey: /root/.ssh/id_rsa
    

    上面的配置会在备份的配置发生改变时,把三个本地仓库分别推送到远程仓库,远端仓库使用密钥认证。

注意事项

  1. 修改配置文件需要重启 docker 的时候,不会自动删除 pid 文件,会导致无法启动,需要手动删除解决。
rm -rf /etc/oxidized/pid && docker restart oxidized_1

前端界面展示

首页:

在这里插入图片描述

查看配置:

在这里插入图片描述

基于 git 方式时,查看版本:

image-20220427230359851

查看版本差异:

image-20220427230433163


http://chatgpt.dhexx.cn/article/rHouOCQf.shtml

相关文章

小波变换的matlab程序:wavename='cmor5-2'; 这里5是带宽,2是中心频率,这我知道~但是他们的单位是多少呀? Hz?kHz?MHz? 我的分析频率是e6级的,大概怎么设置参数呢

答: 嗯,照道理是没有固定单位滴,小波分析用的是相对概念,即要根据原始信号频率换算,如何设置参数从原理上都是合理的,就看你需要分析哪些特征,多试几次,选择结果好的就行。 追问&am…

超宽带(UWB)信号谱的中心频率及-10dB带宽的计算(MATLAB)

对于超宽带(UWB)信号,相对带宽或带宽及中心频率是其中两个重要的参数。如果已经得到UWB信号谱,那么通过信号谱如何来计算带宽及中心频率呢? 一般来说,UWB信号谱可以通过直接测量或者由OptiSystem得到&#…

带宽和频率

信道的带宽:对信道来说,带宽是衡量其通信能力的大小的指标。 1、对模拟信道,使用信道的频带宽度来衡量。如果一个信道,其最低可传输频率为f1的信号,最高可传输频率为f2的信号,则该模拟信道的带宽是:模拟信…

聊聊最简单的名词:频率

聊聊最简单的名词:频率 01 “频率”02 谐振频率03 中心频率04 工作频率总结: 理科的孩子们从初中起对“频率”这个词就不陌生了吧。为什么还是要说呢?在射频领域的各种频率比较容易混淆,这里还是再聊聊吧。 01 “频率” — 在数…

多普勒频率

多普勒频率:接收频率与发射频率的差值,观察者接收到的频率等于观察者在单位时间内接收到的完全波的个数,因而单位时间内通过接收者的完全波的个数,即接收的频率。 上面是原理:已知多普勒频率是指单位时间内接受者接收的到完全波的…

带通滤波器中心频率带宽matlab,带通滤波器频率设置

qsj8362234 发表于 2012-9-27 12:08 你索性把你的代码发我把 clc ;close all; clear all; fs=20000; %采样频率 dt=1/fs; f1=1000; f2=2000; %两个信号的频率 a=[1 0 1 0 1 0 1 1 0 0]; %信号,取整 nn=length(a); g1=a; g2=~a; %信号反转和g1反向,01取…

射频信号发生器的使用以及相关中心频率,载波,调制波术语解释

今日尝试使用射频信号发生器验证电平转换芯片。然只能输出交流耦合波形,遂无法实现验证。心灰之下,尝试了信号发生器的各项功能,现将相关心得记录如下。 射频信号发生器只能输出交流耦合信号,举例,设定输出1V的信号,频率为1M,输出波形为RMS均值为0V,峰峰值2V,正弦波,…

MATLAB查看连续小波的形态和中心频率

1:查看小波的中心频率和形态(如果想要查看其他的小波,将db3修改一下名字既可以) clear all; cla; close; cfreqcentfrq(db3)% 查看小波频率 [~,psi,xval]wavefun(db3); plot(xval,psi);%% 查看小波 的形态 db3 ,cfreq 0.8000 方法 2 : 画尺…

中心频率和一些概念解释

中心频率是滤波器通频带中间的频率,以中心频率为准,高于中心频率一直到频率电压衰减到0.707倍时为上边频,相反为下边频,上边频和下边频之间为通频带。 从原理上讲,再复杂的声音也可以用傅里叶分析的方法把它最后分解成若干正弦波的叠加。但是如果反过来用正弦波叠加…

带通滤波器中心频率计算公式中R是哪个值_手把手教系列之IIR数字滤波器设计实现...

喜欢就本文就点个赞吧~~ 版权声明:所有文章版权归嵌入式客栈所有,如商业使用,须嵌入式客栈授权。欢迎关注微信公众号,内容更丰富。 【导读】:在嵌入式系统中经常需要采集模拟信号,采集模拟信号的信号链中难免引入干扰,那么如何滤除干扰呢?今天就来个一步一步描述如何…

VMD分解,matlab代码,包络线,包络谱,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,多尺度排列熵,近似熵,包络熵,频谱图,希尔伯特变换,包含所有程序MATLAB代码,-西储大学数据集为例

目录 目录 1.选取数据 2.VMD函数-matlab代码 3.采用matlab脚本导入数据并做VMD分解 4.计算中心频率 5.结果展示 6.智能算法优化VMD参数 1.选取数据 选取1797转速下的内圈故障数据,也就是105.mat,数据集可以在官网下载。下载数据文件|凯斯工程…

信号滤波器以及中心频率概念

1 信号滤波器: 最早期的合成器,用简单的振荡器发生“傻乎乎”的波形,象正弦波、三角波,还有更明亮些的锯齿波、脉冲波等。然后用变形、调制等手法来修饰它们,滤波器是非常重要的工具。 当前的合成器技术已经与早期大不…

无线RF knowledge

2.4G频段 当AP工作在2.4GHz频段的时候,AP工作的频率范围是2.402GHz~2.483GHz。在此频率范围内又划分出14个信道。每个信道的中心频率相隔5MHz,每个信道可供占用的带宽为22MHz,例如:如图所示,channel 1的中心频率为2412…

中心频率详解

该文章讲述了有关中心频率知识详细讲解(图). 中心频率详细讲解 什么是中心频率呢,中心频率就是滤波器通频带中间的频率,以中心频率为准,高于中心频率一直到频率电压衰减到0.707倍时为上边频,相反为下边频,上边频和下边频之间为通频带。 从原理…

Hector slam算法原理解析与代码详解

写了markdown 上传,公式都乱码,无果,截图上传吧 目录 1. hector 原理解析 1.4 多重分辨率地图 2.代码框架 2.1 回调函数 2.2 更新 3. 扫描匹配 3.1 多分辨率匹配 3.2 matchData_2 3.3 scan_match_3 3.4 迭代计算函数 3.5 hession 矩…

Ubuntu常用命令 如何远程连接服务器? 如何创建anaconda虚拟环境? 如何从github上下载代码到服务器? 如何移动、复制、删除文件夹? 如何在服务器间传输文件? 如何在服务器后台运行代码

目前 Ubuntu常用命令 如何远程连接服务器? 如何创建anaconda虚拟环境? 如何从github上下载代码到服务器? 如何移动、复制、删除文件夹? 如何在服务器间传输文件? 如何在服务器后台运行代码? 2.5 创建anacon…

JS逆向day05-某网站登录生成元素加密破解

逆向某网站的登录接口生成元素加密 由于是非法网站所以本文对网址进行了遮挡,但是其中的登录接口加密还是挺有意思的,故写下日志进行逆向,本文仅供参考! 登录接口解析 还是用我们的老套路,发送登录请求,获取登录的url,来看看参数加密情况 password很明显这个参数加密了,作者这…

破解 jar 包之直接修改 .class 文件方式

一、常规 JAVA 软件破解流程 先讲一下常规jar包的破解流程。 1. 快速定位。 1) 通过procmon监控相关软件,查看程序都访问了些啥。 2) 用jd-gui反编译 jar 包,得到源码。 3) 搜索关键字以定位。 这种定位方法只是千万种中的一种&#xff…

Maven项目整合MyBatis、Spring、Springmvc

一、MyBaits 1. MyBatis简介(了解) 1.1. 什么是MyBatis MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架&…

Git正解 脱水版 【10. 内部机制】

a.1 底层命令 之前大概介绍了30个Git常用命令,比如checkout/branch/remote等,由于Git的最初目标是一个工具集合,而不是VCS系统,因此包含了大量的底层命令,以便在类Unix系统的脚本中调用,所以这类命令被称为底层命令,而那些对用户更友好的命令,被称为封装命令.之前的介绍以封装…