免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10861 | 回复: 15
打印 上一主题 下一主题

[学习共享] Shell备份交换机配置,文档! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-10 11:38 |只看该作者 |倒序浏览
本帖最后由 kingsh2012 于 2014-05-11 18:43 编辑

感谢http://blog.chinaunix.net/uid-20569113-id-2793105.html

感谢shell板块里面的大神们帮助,有什么问题,和好的建议帮忙提出,谢谢。

需求介绍

本人管理校园网,当学校大规模停电在来电的时候,有很多交换机会挂掉,还得从新配置交换机,特殊的端口,如一卡通,水电管理都是通过网络传输数据,当网线和端口插错就很麻烦,所以写了个脚本来备份这些交换机配置。
400多台交换机,多种型号。

目录结构

switch/
├─check/
│     cfgfile.sh 读取成功上传配置的IP地址
│     source.sh  读取switch.conf的IP地址
├─errlog/
│  没有上传配置的交换机生成日志
├─log/
│  整个备份的过程生成日志

│ info.sh       查看备份状况程序
│ run.sh        主备份程序
│ switch.conf   存放IP地址,用户名,密码,配置文件名称

run.sh

  1. #!/bin/bash

  2. ################################################################################
  3. ##########

  4. #TFTP Server Size
  5. TFTP_IP=10.110.0.222

  6. #Switch Config File (user,password,ip)
  7. Switch_conf=switch.conf

  8. #Now date
  9. Daliy="$(date +%Y-%m-%d)"

  10. ################################################################################
  11. #########

  12. while read SW_INFO; do

  13.   FACTORY=`echo $SW_INFO | awk -F"," '{print $1}'`

  14.   SW_IP=`echo $SW_INFO | awk -F"," '{print $2}'`

  15.   TELNET_NAME=`echo $SW_INFO | awk -F"," '{print $3}'`

  16.   TELNET_PASSWD=`echo $SW_INFO | awk -F"," '{print $4}'`

  17.   SWITCH_CONF=`echo $SW_INFO | awk -F"," '{print $5}'`

  18.   (
  19.     #锐捷交换机
  20.     if [ "$FACTORY" = "rj" ];then
  21. expect<<EOF
  22.       spawn telnet $SW_IP

  23.       expect "Username:"
  24.       send "$TELNET_NAME\r"

  25.       expect "Password:"
  26.       send "$TELNET_PASSWD\r"

  27.       send "copy running-config startup-config\r"
  28.       send "copy startup-config tftp:\r"
  29.       send "$TFTP_IP\r"
  30.       send "$SW_IP.txt\r"
  31.       send "! ##############################################################\r"
  32.       send "exit\r"
  33.       expect eof
  34. EOF
  35.     fi

  36.     #6506
  37.     if [ "$FACTORY" = "6506" ];then
  38. expect<<EOF
  39.       spawn telnet $SW_IP

  40.       expect "Password:"
  41.       send "$TELNET_NAME\r"

  42.       expect "*>"
  43.       send "enable\r"

  44.       expect "Password:"
  45.       send "$TELNET_PASSWD\r"

  46.       send "copy running-config startup-config\r"
  47.       send "copy startup-config tftp:\r"
  48.       send "$TFTP_IP\r"
  49.       send "$SW_IP.txt\r"
  50.       send "! ##############################################################\r"
  51.       send "exit\r"
  52.       expect eof
  53. EOF
  54.    fi

  55.     #华为交换机
  56.     if [ "$FACTORY" = "hw" ];then
  57. expect<<EOF
  58.       spawn telnet $SW_IP
  59.       expect "Password:"
  60.       send "$TELNET_PASSWD\r"
  61.       send "tftp ${TFTP_IP} put ${SWITCH_CONF} ${SW_IP}.zip\n\r"
  62.       exec sleep 1
  63.       send "# ############################################################\n\r"
  64.       send "quit\n\r"
  65.       expect eof
  66. EOF
  67.     fi

  68.     #h3c交换机
  69.     if [ "$FACTORY" = "h3c" ];then
  70. expect<<EOF
  71.       spawn telnet $SW_IP
  72.       expect "Password:"
  73.       send "$TELNET_PASSWD\r"
  74.       send "tftp ${TFTP_IP} put ${SWITCH_CONF} ${SW_IP}.cfg\r";
  75.       send "! ##############################################################\r"
  76.       send "quit\r"
  77.       expect eof
  78. EOF
  79.     fi

  80.     #华为2126型号交换机
  81.     if [ "$FACTORY" = "hw2126" ];then
  82. expect<<EOF
  83.       spawn telnet $SW_IP
  84.       expect "Password:"
  85.       send "$TELNET_PASSWD\r"
  86.       send "sys\r"
  87.       send "tftp put ${SWITCH_CONF} //${TFTP_IP}/${SW_IP}.cfg\r";
  88.       send "! ##############################################################\r"
  89.       send "quit\r"
  90.       send "quit\r"
  91.       expect eof
  92. EOF
  93.     fi

  94.     #凯创交换机
  95.     if [ "$FACTORY" = "kc" ];then
  96.       echo "ERROR!!!!"
  97. #expect<<EOF
  98. #      spawn telnet $SW_IP
  99. #      expect "Username:"
  100. #      send "$TELNET_NAME\r"
  101. #      expect "Password:"
  102. #      send "$TELNET_PASSWD\r"

  103. #EOF
  104.     fi
  105.   )|tee -a ./log/switch_backup_$Daliy.log
  106. done <  $Switch_conf
  107. exit 0
复制代码
  info.sh

  1. #!/bin/bash
  2. #工作目录
  3. cd /opt/switch/check/

  4. #当前时间
  5. Daliy="$(date +%Y-%m-%d)"

  6. ./source.sh > 1.txt
  7. ./cfgfile.sh > 2.txt

  8. sort -n 1.txt > 3.txt
  9. sort -n 2.txt > 4.txt


  10. #成功备份数
  11. cd /opt/Switch_config_file
  12. echo "##########################################################"
  13. echo "总共交换机数"
  14. awk 'END{print NR}' /opt/switch/switch.conf

  15. echo "成功备份交换机数"
  16. #ll  |grep "^-" | wc -l 其实应该用这个命令查看文件下的文件数
  17. find ./ -type f | wc -l
  18. echo "##########################################################"

  19. #文件对比
  20. cd /opt/switch/check
  21. echo "备份失败的交换机!"
  22. comm -3 3.txt 4.txt > /opt/switch/errlog/err_$Daliy.log
  23. comm -3 3.txt 4.txt
  24. echo "##########################################################"

  25. #删除.txt文件
  26. rm -rf *.txt
复制代码
cfgfile.sh

  1. #!/bin/bash
  2. #读取TFTP文件夹内的文件
  3. Folder_A="/opt/Switch_config_file"
  4. for file_a in ${Folder_A}/*; do
  5.     temp_file=`basename ${file_a%.*}`
  6.     echo $temp_file
  7. done
复制代码
source.sh

  1. #/bin/bash
  2. #工作目录
  3. #cd /opt/switch/
  4. file="/opt/switch/switch.conf"
  5. #执行目录
  6. while read SW_INFO; do
  7. SW_IP=`echo $SW_INFO | awk -F"," '{print $2}'`
  8. (
  9.   echo $SW_IP
  10. )
  11. done < $file
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2014-05-10 18:46 |只看该作者
谢谢分享

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
3 [报告]
发表于 2014-05-10 23:07 |只看该作者
回复 1# kingsh2012


    好文!

论坛徽章:
3
水瓶座
日期:2014-02-20 12:02:14天蝎座
日期:2014-03-19 14:04:46水瓶座
日期:2014-07-26 20:01:02
4 [报告]
发表于 2014-05-11 01:30 |只看该作者
很不错的贴,mark一下,日常运维说不定需要用到。

论坛徽章:
3
水瓶座
日期:2014-02-20 12:02:14天蝎座
日期:2014-03-19 14:04:46水瓶座
日期:2014-07-26 20:01:02
5 [报告]
发表于 2014-05-11 01:30 |只看该作者
很不错的贴,mark一下,日常运维说不定需要用到。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2014-05-11 08:46 |只看该作者
回复 1# kingsh2012


    误写? 有两个"cfgfile.sh", 其中一个应该是 "source.sh" 吧。

论坛徽章:
0
7 [报告]
发表于 2014-05-11 10:20 |只看该作者
回复 6# blackold


    谢谢,马虎了,已经修改了。

论坛徽章:
0
8 [报告]
发表于 2014-12-16 13:42 |只看该作者
不错,正好想怎么实现自动备份交换机配置,有值得借鉴的地方。

论坛徽章:
0
9 [报告]
发表于 2015-09-21 16:05 |只看该作者
学习·······················

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
10 [报告]
发表于 2015-09-22 14:25 |只看该作者
那个run.sh可以优化下,将if判断改为case语句,将expect部分放到函数里,然后用位置参数传递变量,愚见。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP