网络设备厂商众多,各种安全厂商,网络厂商,负载均衡厂商,如果想实现自动化备份配置,可以自己写python脚本。如果网络设备厂商多,自己写python 非常耗费时间精力。偶然在网上发现了oxidized 非常好用,支持120多种厂商,常见的思科,华为,f5,思杰,checkpoint 都支持。 我用docker 平台 +mysql 搭建了一套环境。
docker 非常的轻便好用,与虚拟机的链接克隆原理有异曲同工之妙,通过‘写时复制原理’ 实现相同的系统库调用。首先每个企业自动化运维的第一步都是搭建自己的CMDB库,我搭建的主要是网络设备的,来存放网络设备的ip 地址,用户名,版本密码信息。作为自动化运维脚本或工具的数据源。
环境准备
Centos 7.2
第一步 安装yum 源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
第二步 安装docker
yum -y install docker
第三步 搜索oxidized 和mysql 镜像
搜索oxidized 镜像
搜索mysql镜像
下载mysql8.0 和 oxidized 镜像
docker pull oxidized/oxidized:latest
docker pull mysql:8.0
第四步 启动mysql 镜像
mysql 8.0 字符编码默认就是utf8 不用额外指定
docker run \
--name mysql \
-p 3306:3306 \
--restart=always \
-e MYSQL_ROOT_PASSWORD=shuaibi \
-v /date/mysql/:/var/lib/mysql/ \
-d mysql:8.0 \
-name 指定容器名字
-p 创建端口映射
-v 宿主机/date/mysql/目录挂载到/var/lib/mysql/
-e 指定root密码
-d 后台运行
--restart=always docker 重启时 容器自动启动
利用docker ps 查看运行中的容器
第五步 更改验证方式,允许root 用户 远程登录 并创建基础表结构
docker exec -it mysql /bin/bash
mysql -uroot -p***
由于恶心的mysql 8.0 更改里验证方式,很多调用报错,需要更改验证方式,
select host,user,plugin from mysql.user;
更改root的验证方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'shuaibi';
第六步 创建基础表结构
CREATE TABLE `net_dev` (
`id` int(10) UNSIGNED NOT NULL,
`ipadd` text NOT NULL,
`model` text NOT NULL,
`username` text NOT NULL,
`password` text NOT NULL,
`enabled` char(32)
) ;
model 用来存放设备厂商 如思科的ASA,F5的tmos,华三的comware等
ipadd 用来存放ip 地址
username 用来存放用户名
password 用来存放密码
enabled 是思科的enable密码
可以用Navicat 工具直接连入数据库 进行网络设备添加测试
华三设备
INSERT INTO `net_dev`(`ipadd`, `model`, `username`, `password`, `enable`) VALUES ('192.168.92.227', 'comware', 'admin', 'shuaibi', '');
思科设备
INSERT INTO `net_dev`(`ipadd`, `model`, `username`, `password`, `enable`) VALUES ('192.168.92.228', 'ios', 'cisco', 'shuaibi', 'shuaibi);
查看mysql的容器ip地址
运行 docker inspect mysql
第七步骤 创建oxidized的配置文件 #可以直接复制我的配置文件
创建/date/oxidzied/ 目录 用来存放设备的配置,oxidized的配置文件
mkdir -p /date/oxidzied
vim /date/oxidzied/config
---
username: xxx #
password: xxx #
model: nxos #
resolve_dns: true
interval: 604800 # 备份周期7天
use_syslog: false
debug: false #初次安装时要开启
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/
rest: 0.0.0.0:8888
#rest: false
next_adds_job: false
vars:
auth_methods: ["none", "publickey", "password", "keyboard-interactive"] # 备份F5 时候要加上keyboard
groups: {}
models: {}
pid: /root/.config/oxidized/pid
stats:
history_size: 10
input:
default: ssh, telnet
debug: false
ssh:
secure: false
ftp:
passive: true
utf8_encoded: true
output:
file:
directory: /root/.config/oxidized/configs
source:
default: sql
sql:
adapter: mysql2 #gem调用
host: 172.17.0.3 #mysql 容器地址
database: network #存放数据的数据库
table: net_dev # 网络信息表
user: root #用户名
password: niubi #用户密码
map:
name: ipadd #用户IP地址
model: model #设备版本信息
username: username # 设备名称
password: password # 设备密码
vars_map:
enable: enable #思科的enable 密码
model_map:
cisco: nxos
juniper: junos
f5: tmos
第八步 启动oxidized 镜像
docker run --name='oxidized' -itd -v /data/oxidized:/root/.config/oxidized -p 8888:8888/tcp -t oxidized/oxidized
docker logs oxidized 查看报错
docker exec -it oxidized /bin/bash #进入到容器里
apt-get install libmysqlclient-dev #安装mysql 客户端
cat /var/lib/gems/2.5.0/gems/oxidized-0.26.3/lib/oxidized/source/sql.rb 可以查看sql.rb 对应的config 里面的变量名称
注意在排错连接时 一定要开debug
最后重启 oxidzied
docker restart oxidized
客户端打开界面测试 10.50.99.247:8888测试
如遇到问题 请debug 看日志 所有日志保错写的很详细 docker los oxidized