rsync自动输入密码实现数据备份

最近有点背,在64位suse上大家django环境出了一堆问题,最后服务器还不稳定不能用……
由于做不了webserver,所以只能用来做备份服务器了,需求比较简单,就是将源服务器的一个目录每天copy过来做备份。其实就是用rsync或者scp即可,最后的问题就变成了怎么让rsync自动输入服务器密码,结果在网上搜了一下方法,有rsyncserver,公秘钥,之类,杯具的是我配置了一下午也没搞定……

然后想起公司有同事之前做过一个自动登录服务器的脚本,是不是只要改一下执行的命令即可呢?修改后的代码如下:

#!/usr/bin/expect -f
#auto ssh login
proc wait {} {
  expect {
    "*asswor*" {
      send not!@#rated\n
      expect {
        "*asswor*" {
          puts stderr "Unknown password."
          exit 1
        }
        "$*" { }
        ">*" { }
        "#*" { }
      }
    }
    "$*" { }
    ">*" { }
    "#*" { }
  }
}
if {[llength $argv] < 1} {
  puts "Usage: [exec basename $argv0] Host."
  exit 1
}
set timeout 30
set dir [lindex $argv 0]
set passwd "dantezhu"
#exp_internal 1
spawn mkdir -p /data/mman_backup/$dir
spawn [exec which rsync] dantezhu@10.6.207.84#36000:/home/dantezhu/release/dgwww/upload /data/mman_backup/$dir -ar --progress
expect {
  "*asswor*" {
    send "dantezhu\n"
    wait 
  }
  "*no)?*" {
    send "yes\n";
    expect {
      "*assword*" {
        send "$passwd\n"
        wait 
       }
    }
  }
  timeout {
    puts "Timeout!"
    exit 1
  }
}
interact

由于是在不知道怎么在这个脚本里面获取当前的年月日,所以又在外面写了一层python(表BS我……)

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import os
timeHere = time.strftime('%m/%d',time.localtime())
cmd = '/home/dantezhu/py_backup/backup_data '+ timeHere
os.system(cmd)

测了一下,一切正常,然后在crontab中加入定时脚本,让它每天0点半执行:

30 0 * * *                      python /home/dantezhu/py_backup/rsync_backup.py >> /data/mman_backup/backup.log 2>&1 &

附:代码下载





原创文章,版权所有。转载请注明:转载自Vimer的程序世界 [ http://www.vimer.cn ]

本文链接地址: http://www.vimer.cn/?p=1396

14 个评论 在 “rsync自动输入密码实现数据备份”

  1. 可可火山 说:

    expect是基于TCL语法的。介绍expect的书不多,有本但也绝版。看看tcl语法应该也能了解一二。
    set dir [lindex $argv 0]

    应该只要接个字符就可以吧?
    set dir `date +%m/%d`

    没时间测试,博主看看?

    [回复]

    可可火山 回复:

    查了下,tcl语法应该这样来取。 expect一直想深入下,那本exploring expect书只整到部分。不过看TCL语法也OK了。

    set dir [ exec date +%m/%d ]

    [回复]

    Dante 回复:

    呵呵,多谢多谢,明天去公司试试,一直没接触过这个东西呢~~

    [回复]

    Dante 回复:

    哈哈,试了一下,果然可以~~这样就省了外层的py啦~~

    [回复]

    可可火山 回复:

    呵呵 nice

    [回复]

    依云 回复:

    我一直找不到 expect 的资料,所以折腾没一天就放弃了,改为直接拿 python 搞定。有个 pexpect 不错的。

    [回复]

  2. 铁牛仔 说:

    呵呵,不久前我也遇到这个这个rsync的备份问题。上网拼命地搜了下最终给搞出来了。我使用的是ssh密钥的方式。整理一份自认为挺详细的教程在这里:http://tieniuzai.com/?p=203,博主可以参考下。

    [回复]

    Dante 回复:

    一开始也打算用ssh密钥的方式,只是公司用的是ssh2,结果每次都失败。。

    [回复]

    铁牛仔 回复:

    呵呵。rsync备份文件速度真的好快的说。不过现在我遇到一个问题,就是偶尔会出现其他同事修改过的文件rsync检索增量文件的时候检索不到,搞到我每次还得打开那个文件加几个空格进去才行。郁闷….关于这个问题大家有什么好的解决办法吗?又难道是我的同步脚本写得太搓的原因?

    [回复]

    Dante 回复:

    唉,可惜rsync的备份服务一直用不了。。。所以帮不了你。。

    [回复]

  3. jiaion 说:

    可以完全用Python实现的 安装下pextect 就好了.

    [回复]

    Dante 回复:

    哈,搜了一下,果然有啊:
    http://pypi.python.org/pypi/pexpect/

    [回复]

  4. zwssd 说:

    冒似我以前用过expect这东西,用来登陆服务器什么的很好用。主要就是调试了很久。我记得是用十行代码搞定。

    [回复]

    Dante 回复:

    是啊,expect的学习资料很少,所以用起来比较纠结。。

    [回复]

我要评论

*

*