`
cristal
  • 浏览: 27028 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Ubuntu下使用rsnapshot做远程备份

阅读更多
我的系统有很多东西需要备份,而我比较懒,不想自己动脑筋去写shell执行rsync,就用了rsnapshot,在Ubuntu下安装rsnapshot很简单:
$ sudo apt-get install 

剩下的就是配置rsnapshot了。

我有两台Ubuntu,一台叫backup.server用作备份,一台叫online.server,这台需要备份。
首先在两台机器上都建立备份的用户rbackup
$sudo useradd -d /home/rbackup
我要用backup.server去备份online.server,所以backup.server上的用户要登陆到online.server上去执行rsync命令。在backup.server上:
$ cd .ssh
$ ssh-keygen -t rsa
生成id_rsa和id_rsa.pub,注意这里不要输入密码,因为我们需要无密码去连接对方。然后把id_rsa.pub中的内容放到online.server上rbackup用户的信任列表中去,即拷贝id_rsa.pub的内容到online.server上rbackup用户的authorized_keys,如果没有这个文件,则创建一个。现在我们在backup.server上应该可以不提示密码就ssh到online.server了。

出于安全性考虑,没有密码的ssh被认为是极其不安全的,所以我们要限制一下online.server上从ssh登陆上来的rbackup用户的权限,这里通过修改online.server上rbackup的authorized_keys文件如下:

from="backup.server",command="/home/rbackup/validate-rsync.sh" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA2x0QYNVJtF8h8oSlKFzpnPJPFHoi4IYl0Y60eYMb.... == rbackup@backup.server

这里告诉了online.server上的rbackup用户,当从ssh上登陆上来时,执行shell validate-rsync.sh这个脚本。好了,我们的这个validate-rsync.sh具体如下:
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
      *\&*)
        echo "Rejected 1"
        ;;
      *\;*)
        echo "Rejected 2"
        ;;
      rsync*)
        $SSH_ORIGINAL_COMMAND
        ;;
      *true*)
        echo $SSH_ORIGINAL_COMMAND
        ;;
      *)
        echo "Rejected 3"
        ;;
esac


$ chmod +x validate-rsync.sh

这时候如果你从backup.server上执行 ssh online.server应该直接返回"Reject 3",而不再能够登陆上去了。

另外,由于我要备份很多文件是需要root权限的,所以需要对rsync作一下包装,在online.server上执行:
$ sudo vi /usr/local/bin/rsync_wrapper.sh
然后输入以下脚本:
#!/bin/sh
/usr/bin/sudo /usr/bin/rsync "$@";


$ sudo chmod +x /usr/local/bin/rsync_wrapper.sh

为了能够让rbackup这个用户可以执行这条命令,我们还需要把rbackup加入到sudoer中去,在onlien.server上执行:
$ sudo visudo
加入下面这行
rbackup ALL=NOPASSWD: /usr/bin/rsync

这句话告诉系统,rbackup这个用户可以用root的权限来执行rsyn命令。

好了,这些做完以后,我们就可以开始配置rsnapshot了,在backup.server上执行
$ sudo vi /etc/rsnapshot.conf
去掉那些注释掉的cmd_xxx,当然前提是你需要有这些命令。比较重要的是下面几点:

1. interval部分,按照实际情况配置是需要按小时备份,还是按天,按星期等等
2. rsync_long_args --rsync-path=rsync_wrapper.sh --delete --numeric-ids --relative --delete-excluded,注意这里加入了--rsync-path=rsync_wrapper.sh,这里告诉rsnapshot,我们在online.server上运行的rsync是这个包装过的版本,即有sudo权限的。
3. 最后,就是那些backup points了,比如说:
    backup rbackup@online.server:/etc/ online.server/ exclude=mtab
    backup rbackup@online.server:/home/ online.server/ exclude=dummy
具体可以参考rsnapshot的文档。

现在测试一下吧:
$ rsnapshot hourly
这时候如果一切正常的话,在你的目录里就会有hourly.0/online.server这样一个目录,包含了那些你希望备份的东西。
好了,最后就是我们要让它定时执行,也就是编辑我们的cron,
$ crontab -e
30 19 * * * rsnapshot daily
这里我设定的是每天19:30分执行rsnapshot进行备份。你也可以编写一个脚本封装一下rsnapshot,让它执行完之后再把备份的log发到你的邮箱里去,就象下面这样:
#!/bin/sh
rm /home/rbackup/log/*
rsnapshot daily
cat /home/rbackup/log/rsnapshot | mail -s "rsnapshot backup log" "abc@foo.com"





分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics