大盘鸡,是指磁盘容量比较大的VPS,可以用来备份文件和数据。

做跨境业务的人士和公司,手中总有大量不同地区VPS。有的VPS是从一些小IDC厂商中购买的,总有一些会跑路。被跑路了钱财的损失肯定是找不回来了,但更加令人痛心的是数据丢失了。

这里分享一个简单脚本,可以使用来定期把vps上的目录备份到磁盘更大的vps(大盘鸡)上面去,一旦发生跑路事件,起码数据保住了,也是不幸中的万幸。

简单脚本,但是我自己用起来感觉比较实用,分享给有需要的人士。

用法 :

3个参数

./tarscp.sh 目录名或文件名 user@xx.xx.xx.xx:data user的密码

user 是用户名
data 是 /home/user 下存在的 data 目录,即是 /home/user/data/

过程:

先调用 tar 在 /tmp 目录生成一个 tgz 文件,
再scp 到目标大盘鸡上去,文件名带上时间戳和源VPS的IP v4地址。

依赖:
需要系统安装了expect,用于自动登录。

把下面的内容复制到一个新文件 tarscp.sh 中, chmod ugo+x tarscp.sh

#!/bin/bash
# 首发在 https://huiwushi.cc
# named tarscp.sh

myip=`curl http://httpbin.org/ip  | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`

if [ -z "${myip}" ] ; then

  echo "can't get VPS ip"
  exit 3

fi

echo "VPS IP" ${myip}

DIR=$1
if [ -z "${DIR}" ] ; then
   echo usage $0 "<file>" "login_name@host:path" "passwd_of_login"
   exit 2
fi

if [ $# -lt 3 ]; then
   echo usage $0 "<file>" "login_name@host:path" "passwd_of_login"
   exit 127
fi

SSH_LOGIN_PATH=$2
SSH_LOGIN_PWD=$3

echo tar this file/dir ${DIR} ...

fn=`echo ${DIR}| sed "s:/:++:g"`

isroot=`expr substr $DIR 1 1 == '/'`

#not from root
if [ $isroot -eq 1 ] ; then

   echo cd /
   cd /
   DIR=`echo $DIR | awk '{ print substr($1, 2,  length($1)-1) }' `

fi

TMPFN=/tmp/${fn}.tgz

echo tar -zcvf $TMPFN $DIR
dt=`date +%y%m%d%H%M`

tar -zcvf $TMPFN $DIR
if [ $? -eq 0 ] ; then
  echo scp $TMPFN $LOGIN_PATH/${myip}.${dt}.$fn.tgz

/usr/bin/expect <<EOF
set time 30
  spawn scp $TMPFN ${SSH_LOGIN_PATH}/${myip}.${dt}.$fn.tgz
  expect {
    "*yes/no" { send "yes\r"; exp_continue}
    "*password:" {send "${SSH_LOGIN_PWD}\r"}
  }
  expect eof
EOF

  rm -rf $TMPFN

else
   echo file not exists
fi

#===脚本结束===

作者 灰武士

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注