SHELL 批量备份 H3C 交换机配置文件并告警至企微机器人

第一部分:(交换机/防火墙配置)

交换机开启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

第七部分:(效果展示)

备份执行过程:

 企微机器人通知:

备份文件页面展示:




完结,总体基本实现了日常配置的自动备份及查看调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值