linux中expect不用输密码自动下载数据备份(新)linux操作系统 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    用了scp去下载数据备份,但最近海底光缆不是断了嘛,并且用scp去down数据只有几十K的速度,实在是太慢了,我们发现用http下载方式速度是很快,最慢也有100+k/s,为了把服务器的数据备份到本地,我对原来的脚本进行了大更改

    这里先说下脚本的实现过程:

    1.先在服务器上把备份自动打包到一个web目录下(当然这个web目录其他人无法访问到的),好让脚本去下载.

    2.在本地服务器把备份包下载下来,进行解压然后拷贝到专门的备份目录里.

    3.当上面两步都完成了,我们就要把服务器上那个备份包删除,避免泄露.

    下面是脚本:

    1.这个是在服务器上把最新备份筛选出来,并把最新备份打包到web目录:

    cat copy_bakfile.sh

代码如下复制代码

    #!/bin/bash

    location="/root/sqlbak/"

    newfile="/root/newfile"

    file='/root/newfile'

    web="/var/www/vhosts/wwwroot/phpmyadmin"

    rm -f ${file}/*

    #file=$(find $location -type f -mtime -1)

    file=$(find $location -type f -mmin -60)

    cp $file $newfile

    sleep 3

    ls -l $newfile |awk '{print $9}'|xargs tar -C $newfile/ -czf $web/bak.tar.gz

    2.这是下载备份包脚本(先连到服务器上执行copy_bakfile.sh把最新备份筛选出来,并打包到web目录,并把打包好的bak.tar.gz下载到本地)

    cat down.exp

代码如下复制代码

    #!/usr/bin/expect -f

    set timeout -1

    set passwd PASSWORD

    spawn ssh -p18330 root@124.248.xxx.xxx

    expect {

    "yes/no" { send "yesr";exp_continue }

    "password:" { send "$passwdr" }

    }

    expect "*#*" { send "sh /root/soft_shell/copy_bakfile.shr" }

    expect "*#*" { send "exitr" }

    spawn axel -q http://blog.slogra.com/bak.tar.gz -o /root/sqlbak/

    expect eof

    3.这是解压备份包脚本

    cat process.sh

代码如下复制代码

    #!/bin/bash

    pid=`ps -C axel --no-header|wc -l`

    file=`find /root/sqlbak/ -name bak.tar.gz.st|wc -l`

    list="/root/sqlbak"

    newfile="/data/onlinesqlbak"

    date="`date '+%Y-%m-%d %H:%M:%S'`"

    if [[ $pid -eq 0 ]] || [[ $file -eq 0 ]];then

    expect /root/soft_shell/delbak.exp

    #tar zxf $list/*

    tar zxf $list/* -C $newfile/

    sleep 10

    rm -f $list/bak.*

    #for i in $list/*;do cp -r $i $newfile/;done

    #sleep 1

    #rm -f $list/*.gz

    else

    echo "$date | load download....." >>/root/processlog.txt

    fi

    s:相信大家都知道怎么确认是否有下载完,这个脚本就起到检查down.exp是否有下载完,确认下载完了才解压bak.tar.gz,并把解压出来的拷贝到专门的备份目录里,并执行删除脚本去删除服务器上web目录里的bak.tar.gz包.

    4.这是删除服务器上bak.tar.gz包的脚本

    cat delbak.exp

代码如下复制代码

    #!/usr/bin/expect -f

    set timeout -1

    set passwd PASSWORD

    spawn ssh -p18330 root@124.248.xxx.xxx

    expect {

    "yes/no" { send "yesr";exp_continue }

    "password:" { send "$passwdr" }

    }

    expect "*#*" { send "rm -f /var/www/vhosts/wwwroot/phpmyadmin/bak.tar.gzr" }

    expect "*#*" { send "exitr" }

    expect eof

    最后说一句,要使用上面这几个脚本,记得先安装axel和expect这两个工具,不然你是无法把备份包down下来的.

    原文来自:http://blog.slogra.com/post-517.html

最新文章