配置文件备份方案(expect+shell)

需求描述:备份所有线上服务器squid、httpd、mysql、nginx的配置文件

环境:在公司内网采用expect+shell脚本模式,进行批量备份。expect脚本通过ssh登录服务器,从本地copy一份shell脚本到服务器上,然后执行脚本将配置文件遍历出来传到指定服务器进行备份。

1、expect脚本batch_backupconf.exp

#!/usr/bin/expect

set timeout 30

set target_host [lrange $argv 0 0]

set target_port [lrange $argv 1 1]

set source_host sphinx1906.phpdba.com

set source_port 9191

set login_name root

set password 123456



spawn ssh $target_host -p $target_port -l $login_name -i /root/.ssh/id_rsa



expect {

        "*(yes/no)?"         {

                send  "yes\r"

                exp_continue

        }

        "*assword:"      {

                send "$password\r"

        }

}



expect "#"

send "uname\n"

expect "Linux"

send_user "Now you can do some operation on this terminal\n"

expect "#"

send "scp -P $source_port $source_host:/root/chen-123/expect/backup_conf.sh 

        \/root/ \n"

exec sleep 15

send_user "开始执行代码 \n"

send "sh backup_conf.sh $target_host \n"

expect {

        "*(yes/no)?"    {

                send  "yes\r"

                exp_continue

        }

        "*assword:"     {

                send "$password\r"



        }

}

exec sleep 5

expect "#"

send "rm -f backup_conf.sh \n"

send_user "\nThis is $source_host!\n操作完成!\n"

exec sleep 1

exit

2、shell脚本backup_conf.sh

#!/bin/sh

if [ $# != 1 ];then

        echo "请传参数!"

        exit 1;

fi



for i in `find /opt/phpdba/ -maxdepth 4 -type f -regex ".*\.\(com\|conf\|cnf\)" 

          \-print|grep -E 'httpd\.conf|nginx\.conf|squid\.conf|*\.com|*\.cnf'`;

       do        

        tmp=`echo "$i"|sed s#/#_#g`        

        echo $i

        scp -Pxxx $i xxx.xxx.xxx.xxx:/opt/phpdba/backup_conf/$1_${tmp}

         \`date +%Y%m%d%H`

done

3、batch_backupconf.sh

#!/bin/sh

cat iplist_all|while read line

do

        host_ip=`echo "$line"|awk -F'\t' '{print $1}'`

        host_port=`echo "$line"|awk -F'\t' '{print $2}'`

        echo $host_ip"->"$host_port

        /usr/bin/expect batch_backupconf.exp $host_ip $host_port

done

4、iplist_all
192.168.0.9 22
192.168.0.213 22
192.168.0.114 29622
192.168.0.116 29622

你可能感兴趣的:(expect)