网络设备配置备份怎么做:Oxidized 从规划到上线的实用指南
【免费下载链接】oxidizedOxidized is a network device configuration backup tool. It's a RANCID replacement!项目地址: https://gitcode.com/GitHub_Trending/ox/oxidized
Oxidized 是一个网络设备配置备份工具,定时登录设备拉取运行配置,写进 Git 仓库,保留每次变更的历史。它支持 130 多种操作系统类型,适合有几十到几千台设备、想要版本化配置和审计追踪的运维团队。
🧭 动手前先想清楚
先别装软件,三个问题定下来,后面的配置基本就定型了:
- 备份范围和频率:多少台设备、多久拉一次?规模决定你用 CSV 还是数据库做设备清单,也决定线程数。
- 配置存到哪:全部塞进一个 Git 仓库,还是按部门/站点拆成多个仓库?要不要落盘加密?
- 权限边界:谁能读配置、谁能改仓库?设备侧用密码还是密钥,是否要去掉口令等敏感字段?
想清楚这三点,你就知道该用哪套 output、要不要 git-crypt、要不要按 group 拆库。
🚀 最小可用配置
先装依赖和主程序(以 Debian/Ubuntu 为例):
apt install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config libssh2-1-dev libyaml-dev gem install oxidized也可以从源码装:
git clone https://gitcode.com/GitHub_Trending/ox/oxidized cd oxidized && rake install第一次运行oxidized会在~/.config/oxidized/config生成默认配置。把下面这份精简配置填进去,只保留能跑起来的部分:
username: backup password: changeit model: ios interval: 3600 output: default: git git: user: Oxidized email: o@example.com repo: /var/lib/oxidized/devices.git再建一个设备清单文件~/.config/oxidized/router.db,一行一台,格式是主机名:模型(可再加账号、密码、enable 口令):
router01.example.com:ios:backup:secret跑一次oxidized,devices.git里就会出现第一次备份。到此为止已经能用了,剩下的按场景选路。
🔀 按你的场景选路
单一 Git 仓库
所有设备进一个库,方便统一 diff 和检索。适合设备在一两千台以内、团队共用一个视图的情况。
output: default: git git: user: Oxidized email: o@example.com repo: /var/lib/oxidized/devices.git single_repo: true注意:single_repo让所有分组共用一个仓库,配合clean_obsolete_nodes: true还能自动清掉已下线设备的旧配置。
按分组拆多个仓库
不同部门或站点要权限隔离时,用分组,Oxidized 会为每个 group 自动建库。在 source 的map里把某一列映射成group即可。
output: default: git git: user: Oxidized email: o@example.com repo: /var/lib/oxidized/git-repos/default.git注意:无分组的设备进default.git,其余按分组名各建一个.git,目录结构会多一层。
Git-Crypt 加密落盘
配置含敏感信息、落盘必须加密时,用 gitcrypt 输出,提交时被 git-crypt 在线加密。
output: default: gitcrypt gitcrypt: user: Oxidized email: o@example.com repo: /var/lib/oxidized/devices users: - "0xABCDEF0123456789"注意:users列表只在建仓时写入一次,之后要加解密人得手动git-crypt add-gpg-user。
设备清单来自数据库
设备多、手工维护 router.db 不现实、已有 CMDB 时,直接用 SQL source。
source: default: sql sql: adapter: sqlite database: /var/lib/oxidized/nodes.db table: nodes map: name: fqdn model: model注意:name字段是必填的,它决定输出文件名,映射错了对应不上配置。
✅ 上线前的最后检查
- 调线程和超时:
threads、timeout、timelimit默认是 30 / 20 / 300,按设备规模和慢设备情况调,别让一台慢设备堵住整个队列。 - 仓库写权限:git 输出要能写 repo 目录,用专门的
oxidized用户跑,别用 root。ls -ld /var/lib/oxidized确认属主对得上。 - 去掉敏感字段:加
vars: { remove_secret: true },让模型里的替换规则把 SNMP community 之类的口令抹掉,别把明文带进仓库。 - 接一个告警:用 hook 订阅
node_fail,备份连续失败时第一时间知道,而不是第二天才发现。 - 要不要开 Web:需要 REST API 和界面就装
oxidized-web,默认不加载,按需再开。
📈 跑起来之后
查某台设备的变更历史最直接:
cd /var/lib/oxidized/devices.git git log --follow router01.example.com git diff HEAD~1 HEAD -- router01.example.com想把每次变更邮件发出去,挂一个 exec hook 调用仓库自带的脚本 extra/oxidized-report-git-commits,它在post_store事件里跑,生成 diff 并发信。日常看设备清单、手动触发某台设备立即备份,则用 oxidized-web 的GET /nodes、GET/PUT /node/next/[NODE]接口。
⚠️ 别踩这些坑
连上设备却拉不到配置、或直接超时。多半是设备真实提示符和模型里定义的prompt正则对不上。用 irb 验证'实际提示符' =~ /模型里的正则/,不匹配就把该模型复制到~/.config/oxidized/model/下改正则,Oxidized 会优先用本地这份。
仓库越来越大、备份越来越慢。Git 仓库只增不减,积累多了就变卡。停掉 oxidized、先备份数据,进仓库跑一次git gc,再启动。
配了 githubrepo 却推不到远端。运行用户的known_hosts没信任那台 Git 服务器。执行ssh-keyscan git.intranet >> ~/.ssh/known_hosts(容器里要把这个目录映射进容器)。
你改了仓库,oxidized 却不认。裸仓库的 index 不会随 push 更新,Oxidized 读的是缓存的 HEAD。进仓库执行git ls-tree -r HEAD | git update-index --index-info手动同步。
下一步
想让某类设备把show version、show inventory拆成独立输出类型、或写自己的设备模型,看 docs/Creating-Models.md;全部输入、输出、hook、日志的完整参数在 docs/Configuration.md。模型实现本身放在 lib/oxidized/model/,照着现成的 ios.rb、junos.rb 抄结构最快。
【免费下载链接】oxidizedOxidized is a network device configuration backup tool. It's a RANCID replacement!项目地址: https://gitcode.com/GitHub_Trending/ox/oxidized
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考