第一部分:(交换机/防火墙配置)
交换机开启SCP功能:
<H3C> sys
[H3C] scp server enable
查看交换机配置文件的位置:
第二部分:(企微聊天群内创建机器人,并获取webhook地址)
机器人接口配置请查看官方说明:群机器人配置说明 - 文档 - 企业微信开发者中心 (qq.com)
第三部分:(脚本主体)
#!/bin/bash
net_list=/opt/net_bak_work/net_ip_list
cat ${net_list} | while read line
do
host_list=$(echo $line | awk '{print $1}' )
name_list=$(echo $line | awk '{print $2}' )
# linux_dir
src_file='flash:/startup.cfg'
# windows_dir
# src_file='flash:\startup.cfg'
dest_file=/opt/net_bak_work/$(date "+%Y%m%d")/
mkdir -p ${dest_file}${name_list}
expect -f net_bak.expect "$host_list" "$name_list" "$src_file" "$dest_file"
done
if
[ $? -eq 0 ];then
bak_list=$(find /opt/net_bak_work/$(date "+%Y%m%d")/ -name startup.cfg)
bak_file_num=$(find /opt/net_bak_work/$(date "+%Y%m%d")/ -name startup.cfg | wc -l)
wx_bot_api='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=************'
curl ${wx_bot_api} -H "Content-Type: application/json" -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"# <font color="warning">网络配置备份监控</font>\n >执行结果:<font color="info">成功</font>\n>文件数量:<font color="warning">$bak_file_num</font>\n>文件列表:\n<font color=comment>$bak_list</font>\n>文件详情:<font color=info>[Bakfile_address_url](http://172.16.40.201/netbak)</font>\"}}"
else
curl ${wx_bot_api} -H "Content-Type: application/json" -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"<font color="warning">网络设备配置文件备份错误!</font>\n>页面详情:[Bakfile_address_url](http://172.16.40.201/netbak)\n>执行时间: <font color=comment>$(date "+%Y_%m_%d-%H:%M:%S")</font>\"}}"
fi
注:在shell中使用调用json需要先进行转义,例如:
# data1.txt
{
"msgtype": "text",
"text": {
"content": "hello world"
}
}
转义:
cat data1.txt | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g' > data2.txt
结果:
# data2.txt
{
\"msgtype\": \"text\",
\"text\": {
\"content\": \"hello world\"
}
}
再转成字符串形式:(若取值中 存在变量值,则最外侧 {} 使用双引号,单引号仅代表字符串)
"{\"msgtype\":\"test\",\test\": "{\"content\":\"hello world\"}}"
第四部分:(export 自动化传参,若无 export 命令,需 yum install export -y 先行安装)
#!/usr/bin/expect
# 设备密码自动输入
set host_list [ lindex $argv 0 ]
set name_list [ lindex $argv 1 ]
set src_file [ lindex $argv 2 ]
set dest_file [ lindex $argv 3 ]
spawn scp admin@${host_list}:${src_file} ${dest_file}${name_list} # 账号自己修改
expect {
"(yes/no)?"
{
send "yes\n"
expect "password:" {send "abcd1234\n"} # 密码自己修改
}
"password:"
{
send "abcd1234\n" # 密码自己修改
}
}
expect "100%"
expect eof
文件详情:
第五部分:(Nginx静态目录展示备份文件详情,并加设页面访问授权限制)
安装页面访问认证工具:
yum install -y httpd-tools
在nginx配置路劲下生成认证文件,设置账户及密码
htpasswd -cb /etc/nginx/.htpasswd admin 123456
htpasswd扩展指令:
- -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
- -n 不更新passwordfile,直接显示密码
- -m 使用MD5加密(默认)
- -d 使用CRYPT加密(默认)
- -p 使用普通文本格式的密码
- -s 使用SHA加密
- -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
- -D 删除指定的用户
在nginx.conf中添加认证配置,并设置静态目录浏览
server {
listen 80;
listen [::]:80;
server_name localhost;
charset utf-8; # 中文显示
include /etc/nginx/default.d/*.conf;
# 设置页面访问需登录
auth_basic "Please enter the user name and password";
auth_basic_user_file /etc/nginx/.htpasswd;
# 设置指定页面做静态目录展示
location /netbak { # 页面展示路径
alias /opt/net_bak_work; # 文件备份路径
autoindex on; # 开启静态目录浏览
autoindex_exact_size on; # 指定文件大小显示为M默认是b
autoindex_localtime on; # 开启以服务器本地时区显示文件修改日期
}
}
第六部分:(配置crontab,添加定时任务)
# Netcfg_Bakup (每天凌晨2点执行批量备份任务)
0 2 * * * cd /opt/net_bak_work && bash netcfg_bak.sh 2>&1 >> net_bak.log
第七部分:(效果展示)
备份执行过程:
企微机器人通知:
备份文件页面展示:
完结,总体基本实现了日常配置的自动备份及查看调用。