系统数据备份,对于运维工作来说是重要的一环。尤对网工来说,网络设备备份更是必不可少的一项工作。小规模网络,敲敲命令就能搞定,一般tftp一下就好,而稍有点规模的,就几十至上百台设备,依次手工操作备份,这样工作效率就很低下。
这时能够做到网络设备自动化备份,将是这一痛点的解决方案。本来初始设想通过学习ansible实现自动备份的目的,但就对网络设备telnet远程访问的方式,ansible实现起来就较有难度了。偶然在搜索解决方案时,找到了oxidized软件,同样是开源软件,在其实现上天然的支持了常规的远程方式,也就是说,网络设备只要通过telnet和ssh访问的,都可以进行自动备份。
oxidized在功能实现上,是需要识别具体网络设备品牌,然后才可以进行实际的备份动作。在oxidized软件包中有一个model目录,其下保存了大多数主流网络设备的rb文件,这个rb文件中配置了针对网络设备的一些常规操作,如登录telnet、ssh,还有show running-config等,然而并没有备份相关的tftp命令。后来经过实际验证,oxidized的备份,不同于tftp方式保存的是设备中的start.cfg文件,只是通过“show running-config”的方式,将所有配置保存到了一个文本文件中,而这也算是一种可恢复的备份方式了。
参考一
参考二
系统环境
Ubuntu 18.04 LTS
安装
apt update
apt upgrade –y
apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev
gem install oxidized
gem install oxidized-script oxidized-web
验证
oxidized -v
0.26.3
组件
- config文件 存放配置文件
- Sources字段 要备份设备的存放方式
- Outputs字段 备份文件存放的方式
- model字段:设备的厂商所用的os名称
- router.db文件 存放被管理主机的地方
新建用户 oxidized
useradd -m -d /home/oxidized oxidized
配置oxidized 通过systemctl 管理
cp /var/lib/gems/2.5.0/gems/oxidized-0.26.3/extra/oxidized.service /lib/systemd/system
systemctl enable oxidized.service
oxidized目录
mkdir -p /home/oxidized/.config/oxidized
日志目录
mkdir /home/oxidized/.config/oxidized/logs/
备份文件存放目录
mkdir /home/oxidized/.config/oxidized/configs
设置用户目录和用户组
chown oxidized:oxidized /home/oxidized/.config/oxidized
配置文件
---
username: username #服务不检测,此项在router.db中检测
password: password #服务不检测,此项在router.db中检测
model: junos #服务不检测,此项在router.db中检测
interval: 3600
log: /home/oxidized/.config/oxidized/logs/oxidized.log
debug: false
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/ #网络设备登录后匹配的提示符
rest: 127.0.0.1:8888 #web访问的地址,实际通过nginx重定向此地址
next_adds_job: false
vars: {}
groups: {}
models: {}
pid: "/home/oxidized/.config/oxidized/pid"
input:
default: ssh, telnet
debug: false
ssh:
secure: false
output:
default: file
file:
directory: "/home/oxidized/.config/oxidized/configs"
source:
default: csv
csv:
file: "/home/oxidized/.config/oxidized/router.db"
delimiter: !ruby/regexp /:/
map:
name: 0
model: 1
username: 2
password: 3
gpg: false
model_map: #服务不检测,此项在router.db中检测
cisco: ios #服务不检测,此项在router.db中检测
juniper: junos #服务不检测,此项在router.db中检测
设备文件
#需要备份的设备列表
/home/oxidized/.config/oxidized/router.db
10.x.x.x:comware:admin:password
启动oxidized
systemctl restart oxidized.service
systemctl status oxidized.service
● oxidized.service - Oxidized - Network Device Configuration Backup Tool
Loaded: loaded (/lib/systemd/system/oxidized.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-04-25 09:12:47 UTC; 52min ago
Main PID: 21836 (oxidized)
Tasks: 7 (limit: 4663)
CGroup: /system.slice/oxidized.service
└─21836 puma 3.11.4 (tcp://127.0.0.1:8888) [/]
查看日志
tail -f /home/oxidized/.config/oxidized/logs/oxidized.log
I, [2019-04-25T09:12:48.346012 #21836] INFO -- : Oxidized starting, running as pid 21836
I, [2019-04-25T09:12:48.347489 #21836] INFO -- : lib/oxidized/nodes.rb: Loading nodes
I, [2019-04-25T09:12:48.497476 #21836] INFO -- : lib/oxidized/nodes.rb: Loaded 1 nodes
I, [2019-04-25T09:12:55.093924 #21836] INFO -- : Configuration updated for /10.x.x.x
查看备份目录
ls -l /home/oxidized/.config/oxidized/configs/
total 16
-rw-r--r-- 1 oxidized oxidized 8496 Apr 25 09:28 10.x.x.x
more /home/oxidized/.config/oxidized/configs/10.x.x.x
# H3C Comware Platform Software
# Comware Software, Version 5.20.99, Release 1110
# Copyright (c) 2004-2016 Hangzhou H3C Tech. Co., Ltd. All rights reserved.
#
# H3C S5110-52P
# 128M bytes DRAM
# 32M bytes Flash Memory
# Config Register points to Flash
Web UI管理
#安装nginx
apt install nginx
#安装认证模块
apt-get install apache2-utils
#创建密码文件
mkdir -p /data/nginx/db/
cd /data/nginx/db/
touch passwd.db
#生成密码
htpasswd -c /data/nginx/db/passwd.db admin
#启动nginx服务
systemctl restart nginx.service
访问web管理
http://10.x.x.x/nodes
使用前边设置的admin和对应密码登录
已测试支持的网络设备厂商
其他只要在Model中有对应设备厂商的rb文件,一般应该都可以,待测试
#H3C
comware
#锐捷FW/飞塔FW
fortios
#华为
vrp
其他
支持设备类型的目录
ls -l /var/lib/gems/2.5.0/gems/oxidized-0.26.3/lib/oxidized/model
total 484
-rw-r--r-- 1 root root 2877 Apr 25 03:51 acos.rb
-rw-r--r-- 1 root root 1998 Apr 25 03:51 acsw.rb
-rw-r--r-- 1 root root 359 Apr 25 03:51 adtran.rb
-rw-r--r-- 1 root root 259 Apr 25 03:51 aen.rb
-rw-r--r-- 1 root root 1033 Apr 25 03:51 aireos.rb
-rw-r--r-- 1 root root 465 Apr 25 03:51 airos.rb
-rw-r--r-- 1 root root 2435 Apr 25 03:51 alteonos.rb
-rw-r--r-- 1 root root 216 Apr 25 03:51 alvarion.rb
-rw-r--r-- 1 root root 1325 Apr 25 03:51 aos7.rb
-rw-r--r-- 1 root root 581 Apr 25 03:51 aos.rb
-rw-r--r-- 1 root root 4043 Apr 25 03:51 aosw.rb
-rw-r--r-- 1 root root 198 Apr 25 03:51 apc_aos.rb
-rw-r--r-- 1 root root 487 Apr 25 03:51 arbos.rb
-rw-r--r-- 1 root root 1279 Apr 25 03:51 aricentiss.rb
-rw-r--r-- 1 root root 3407 Apr 25 03:51 asa.rb
-rw-r--r-- 1 root root 1277 Apr 25 03:51 asyncos.rb
-rw-r--r-- 1 root root 648 Apr 25 03:51 audiocodesmp.rb
-rw-r--r-- 1 root root 498 Apr 25 03:51 audiocodes.rb
-rw-r--r-- 1 root root 3113 Apr 25 03:51 awplus.rb
-rw-r--r-- 1 root root 249 Apr 25 03:51 axos.rb
-rw-r--r-- 1 root root 2187 Apr 25 03:51 boss.rb
-rw-r--r-- 1 root root 992 Apr 25 03:51 br6910.rb
-rw-r--r-- 1 root root 1208 Apr 25 03:51 c4cmts.rb
-rw-r--r-- 1 root root 576 Apr 25 03:51 cambium.rb
-rw-r--r-- 1 root root 1036 Apr 25 03:51 casa.rb
-rw-r--r-- 1 root root 838 Apr 25 03:51 catos.rb
-rw-r--r-- 1 root root 264 Apr 25 03:51 cisconga.rb
-rw-r--r-- 1 root root 1128 Apr 25 03:51 ciscosma.rb
-rw-r--r-- 1 root root 2088 Apr 25 03:51 ciscosmb.rb
-rw-r--r-- 1 root root 284 Apr 25 03:51 ciscovpn3k.rb