通过scp命令下载备份文件的shell脚本实现——使用sshpass

        近期,搭建的应用系统,做了一个shell定时备份,想要从各个数据库里,将数据定时备份到另一台备份机。

        mysql数据库备份在前面博客(http://blog.csdn.net/ruijiao_ren/article/details/79517086)中已做了说明,hbase和es备份,策略是每天将数据备份到本地,在备份机上定时下载。

        这时,我想使用scp命令在备份机上执行命令,通过远程下载将备份文件下载到备份机上,但是发现scp命令手动执行的时候如下:

scp root@172.29.xx.xx:/usr/local/workspaces/hbase_back/xhs_hbase_20180313* /usr/local/backDatas/hbase

        可以成功执行,在对应目录下可以获得下载的文件,但是在执行命令过程中,会提示需要手动输入对方服务器密码,来进行验证。这一步骤在手动操作时,没有问题,但是把下载命令作为shell脚本的话,这就会成为一个问题,所以我的想法是将交互式输入密码方式改为在shell脚本中直接写入,为了实现它,我查看了scp的命令,发现它并不支持在命令中直接写入密码。

        所以为了解决上面的问题,需要借助其他工具,我使用了sshpass工具来解决。

        1、下载这个安装包:

        https://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz

        下载的时候需要打开此链接后,稍等一会儿,就会开始下载任务。

        2、下载好后,需要上传到服务器(备份机),解压并编译安装:

        进入解压目录     

cd /usr/local/backDatas/sshpass/sshpass-1.05

执行编译,然后进行安装,命令如下:

./configure
make && make install

        3、在命令行查看是否安装成功:

             

        表示,安装成功。

       4、 测试一下是否可以用sshpass命令成功使用密码进入其他服务器:

sshpass -p 'xxxxxxxx' ssh root@172.29.xx.xx

        其中,'xxxxxxxx'表示需要访问的服务器的密码,172.29.xx.xx表示需要访问的服务器ip

        若是可以成功进入对应服务器,则表示成功。

        5、测试scp命令在语句中写入密码是否可以成功下载文件:

sshpass -p 'xxxxxxxx' scp -r root@172.29.xx.xx:/usr/local/workspaces/hbase_back/xhs_hbase_201803*  /usr/local/backDatas/hbase
        上面命令的意思就是,从172.29.xx.xx这个服务器的目录/usr/local/workspaces/hbase_back/中将xhs_hbase_201803*这个文件下载到本地(备份机)服务器的/usr/local/backDatas/hbase目录下,其中xhs_hbase_201803*这个表示与只要是xhs_hbase_201803开头的,就符合需求。若是下载的文件是个文件夹,文件夹里面还有层及目录,就需要使用 -r参数进行全部拷贝下载。

        测试成功后,在对应目录可以看到成功下载文件,则表示命令测试成功。

         经过上面的测试,就表示可以将scp下载命令写入shell脚本,在将shell脚本设置定时执行任务。此问题解决。

        shell脚本data_back.sh如下:

#!/bin/bash
#hbase's back
DATETODAY=`date +%Y%m%d`
sshpass -p 'xxxxxx' scp -r root@172.29.xx.xx:/usr/local/workspaces/hbase_back/xhs_hbase_${DATETODAY}*  /usr/local/backDatas/hbase
#es's back
sshpass -p 'xxxxxx' scp -r root@172.xx.xx.xx:/usr/local/workspaces/back_es/data.${DATETODAY}*  /usr/local/backDatas/es

上面表示下载当天备份的数据文件到备份服务器。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值