构建企业级网络设备自动备份平台 -- Oxidized (一)

2020-07-02 14:20:50 浏览数 (1)

作为一名资深的运维搬砖工,我的梦想就是网络服务器设备上线后永不宕机,天天过着吃着火锅还唱着歌的日子,然而每天各种人肉的数据备份操作让我苦不堪言。作为新时代的搬砖工别说人肉操作数据备份了就连ctrl c ctrl v 我都不愿意操作,怎么办呢?答案就是人一定要有梦想说不准哪天就实现了,接下来我来告诉你什么叫幸福来的太突然。为大家介绍宇宙无敌的网络设备自动备份系统 -- Oxidized

Oxidized 介绍

Oxidized 是一个开源的网络设备配置备份工具,轻量级且可扩展的Oxidized支持130多种操作系统。

Oxidized 组成

config 文件:oxidized 配置文件

Sources 字段:定位 router.db 文件的位置

Outputs 字段 :设备备份文件的存储位置

model 字段:设备厂商所用的系统, 核心功能就是靠这个实现的

router.db文件:被管网络设备详细信息

oxidized 项目链接

https://github.com/ytti/oxidized

系统环境

Oxidized 需要运行在Ruby 2.3或更高版本,CentOS 7 系统集成 Ruby2.0 版本

代码语言:javascript复制
[root@kafka-node2 /]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)

卸载 CentOS 7 系统自带的 Ruby2.0 版本

代码语言:javascript复制
yum remove ruby ruby-devel

从 SCL安装 Ruby 2.3

代码语言:javascript复制
#安装centos-release-scl库
yum install centos-release-scl 
#安装rh-ruby23 rh-ruby23-ruby-devel 
yum install rh-ruby23 rh-ruby23-ruby-devel 
#启用rh-ruby23 Software Collection的环境中运行Bash shell
scl enable rh-ruby23 bash

安装依赖软件包

代码语言:javascript复制
yum install make cmake sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel libicu-devel gcc-c   

Oxidized

安装 Oxidized

代码语言:javascript复制
gem install oxidized 
gem install oxidized-script oxidized-web

启动 Oxidized(首次运行 Oxidized,会提示去编辑配置文件)

代码语言:javascript复制
[root@kafka-node2 /]#oxidized
edit ~/.config/oxidized/config

查看 Oxidized 版本

代码语言:javascript复制
[root@kafka-node2 /]# oxidized -v
0.28.0

Oxidized 配置文件

代码语言:javascript复制
[root@kafka-node2 oxidized]# cat config
---
username: username
password: password
model: junos
resolve_dns: true
interval: 3600
log: /root/.config/oxidized/logs/oxidized.log
use_syslog: false
debug: false
threads: 30
timeout: 30
retries: 3
prompt: !ruby/regexp /^([w.@-] [#>]s?)$/
rest: 192.168.99.233:8888
next_adds_job: false
vars: {}
groups: {}
models: {}
pid: "/root/.config/oxidized/pid"
crash:
  directory: "/root/.config/oxidized/crashes"
  hostnames: false
stats:
  history_size: 10
input:
  default: ssh, telnet
  debug: false
  ssh:
    secure: false
  ftp:
    passive: true
  utf8_encoded: true
output:
  default: file
  file:
    directory: "/root/.config/oxidized/configs"
source:
  default: csv
  csv:
    file: "/root/.config/oxidized/router.db"
    delimiter: !ruby/regexp /:/
    map:
      name: 0
      model: 1
      username: 2
      password: 3
    gpg: false
model_map:
  juniper: junos
  cisco: ios

Oxidized配置文件介绍

创建 router.db 文件

格式:

hostname/ip:os:username:password:group

代码语言:javascript复制
[root@kafka-node2 oxidized]# pwd
/root/.config/oxidized
[root@kafka-node2 oxidized]# cat router.db 
192.168.99.112:comware:admin:password:group1
192.168.99.113:comware:admin:password:group1
192.168.99.254:comware:admin:password:group2
192.168.99.21:vrp:admin:password:group2

Oxidized 文件目录

创建设备配置存储目录

代码语言:javascript复制
[root@kafka-node2 oxidized]# pwd
/root/.config/oxidized
[root@kafka-node2 oxidized]# mkdir  -p configs

Oxidized 文件文件默认存储在 ~/.config/oxidized/ 目录下

config Oxidized主配置文件;

crash Oxidized 所有的原始模块路径;

logs 日志存储目录;

configs 设备配置文件存储目录;

router.db 被管网络设备详细信息;

启动 Oxidized

前台运行

后台运行

代码语言:javascript复制
nohup oxidized >> /var/log/oxidized.log 2>&1 &

设备备份文件

Oxidized Web

Oxidized Web 参数介绍

last status: 绿色(备份正常), 蓝色(正在备份), 红色(备份失败)

last update: 上一次备份的时间(配置文件里面默认1个小时 自定义修改interval的值即可)

action: 点击第一个图标就能看到设备备份文件内容,第二个图标为配置文件比对(后续文章介绍), 第三个图标为手动强制备份.

Nginx 反向代理认证

Oxidized Web 默认不提供任何安全认证,为保证系统安全性使用 Nginx 反向代理进行 Web 登录认证。

安装 Nginx 和 httpd-tools

代码语言:javascript复制
yum -y install nginx
yum install httpd-tools

生成用户名密码文件

代码语言:javascript复制
sudo htpasswd -c /etc/nginx/.htpasswd oxidized

Nginx 配置文件

代码语言:javascript复制

[root@kafka-node2 nginx]# egrep -v "*#|^$" /etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  192.168.99.233;
    root   /usr/share/nginx/html;
    auth_basic "oxidized auth access";
    auth_basic_user_file /etc/nginx/.htpasswd;
    location / {
        proxy_pass http://127.0.0.1:8888/;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Oxidized 默认只允许从本地系统(127.0.0.1)在端口8888上 web 访问。

检查Nginx 配置文件

代码语言:javascript复制
nginx  -t

启动 Nginx 服务

代码语言:javascript复制
systemctl    restart  nginx &&  systemctl    enable  nginx

Oxidized Web 身份认证

0 人点赞