有华为2300、5700系列,H3C 3100、5120、5500系列交换,还有神州数码4500的交换机,需进行批量备份,各交换机有两种密码,不是passwd1就是passwd2,利用linux shell和expect写了个脚本,交换机在不
有华为2300、5700系列,H3C 3100、5120、5500系列交换,还有神州数码4500的交换机,需进行批量备份,各交换机有两种密码,不是passwd1就是passwd2,利用linux shell和expect写了个脚本,交换机在不同网段,先进行批量ping扫描ip地址再进备份,备份时先进行保存再tftp上传。
安装expect见http://hiid365.blog.51cto.com/3142060/1350800
#!/bin/bash TFTP=$1 PASSWD1=$2 PASSWD2=$3 IP=$4 if [ "$#" -ne 4 ];then echo "for example:./backup.sh tftp_ip 'passwd1' 'passwd2' 10.255.251" fi if [ -f ./$IP.xx ];then rm -f $IP.xx fi if [ -f ./$IP_error ];then rm -f $IP.error fi echo "******************Scanning Start******************" for n in {2..254} do host=$IP.$n ping -W 1 -c 1 $host &> /dev/null if [ "$?" -eq 0 ];then echo "$host is up" && echo "$host">>$IP.xx else echo "$host is down" fi done echo "******************The scan is complete******************" sleep 3 echo "******************Start backup******************" echo "You can click Ctrl+C skip when backup failed!!!" sleep 5 while read SWIP;do ./back.exp $TFTP $PASSWD1 $PASSWD2 $SWIP if [ "$?" -ne 0 ];then echo "$SWIP" >>$IP.error fi done<$IP.xx echo "*******************Backup Complete*********************" echo "==========The following IP backup failed==========" if [ -f ./$IP.error ];then cat $IP.error fi echo "=================================================="expect代码关键:
#!/usr/sbin/expect set timeout 35 set TFTP [lindex $argv 0] set PASSWD1 [ lindex $argv 1] set PASSWD2 [ lindex $argv 2] set IP [lindex $argv 3] set done 0 spawn telnet $IP expect { "Password:" { send "$PASSWD1\r" expect ">" {send "display version\r"} } "login:" { set done 1 send "admin\r" expect "Password:" {send "$PASSWD1\r"} expect "#" {send "write\r"} expect "Y/N" {send "y\r"} expect "successful" {send "copy startup.cfg tftp://$TFTP/$IP.cfg\r"} expect "Y/N" {send "y\r"} expect "close" {send "quit\r"} } } if {$done==1} { exit 0 } else { expect { "Error:" {send "$PASSWD2\r";expect ">" {send "display version\r"}} "Wrong" {send "$PASSWD2\r";expect ">" {send "display version\r"}} ">" {send "display version\r"} } expect { "S2300" { send "save\r" expect "Y/N" {send "y\r"} expect "successfully" {send "tftp $TFTP put vrpcfg.zip $IP.zip\r"} expect { "successfully." {send "quit\r"} "Error:" {exit 1} } } "S5700" { send "save\r" expect "Y/N" {send "y\r"} expect "successfully" {send "tftp $TFTP put vrpcfg.zip $IP.zip\r"} expect { "successfully." {send "quit\r"} "Error:" {exit 1} } } "S5120" { send "save\r" expect "Y/N" {send "y\r"} expect "key):" {send "\r"} expect "Y/N" {send "y\r"} expect "successfully" {send "tftp $TFTP put startup.cfg $IP.cfg\r"} expect { "successfully." {send "quit\r"} "Error:" {exit 1} } } "S5500" { send "save\r" expect "Y/N" {send "y\r"} expect "key):" {send "\r"} expect "Y/N" {send "y\r"} expect "successfully." {send "tftp $TFTP put startup.cfg $IP.cfg\r"} expect { "successfully." {send "quit\r"} "Error:" {exit 1} } } "S3100" { send "save\r" expect "Y/N" {send "y\r"} expect "key):" {send "\r"} expect "successfully." {send "tftp $TFTP put config.cfg $IP.cfg\r"} expect { "successfully." {send "quit\r"} "Unable" {exit 1} } } } #expect " #expect "Y/N" interact expect eof }在终端运行
#./back.sh tftp服务器ip地址 'passwd1' 'passwd2' 需要备份的网段(如192.168.1)
例外一种同种型号交换机批量备份的shell脚本
终端执行
#./back.sh tftp_ip地址 ‘密码’ ip备份表