VPS备份到远程FTP脚本

基于网上代码修改。由于手上没有好用的FTP服务器,只能用sftp服务器,sourceforge的sftp服务器不仅免费,而且文件大小限制的不严格,速度也快,当然成了首选。
要在shell脚本里连接sftp服务器,必须要执行以下步骤:
1.为运行shell脚本的本地用户生成密钥对
2.将其中的公钥分发到sftp欲登录的远程服务器上
3.编写并以上面的本地用户运行shell脚本

一、生成密钥对:
在shell脚本中使用sftp时必须用到密钥对(公钥和私钥).可使用下列方式生成(SSH 2.X版本),这里本地用户为root:

$ ssh-keygen –d

屏幕提示:

Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 
# 按回车保存为: /root/.ssh/id_dsa,即当前用户root的私钥

Enter passphrase (empty for no passphrase): 
# 按回车,表示读取密钥时不需要密钥的密码

Enter same passphrase again: 
# 确认密钥的密码,必须和上面的输入相同

Your identification has been saved in /root/.ssh/id_dsa.
# 私钥保存信息

Your public key has been saved in /root/.ssh/id_dsa.pub.
# 公钥保存信息

The key fingerprint is:
ec:41:e8:08:38:0b:f8:1e:bc:92:98:32:fc:d7:69:7d ...
# 密钥指纹

二.分发公钥
执行:

cat /root/.ssh/id_dsa.pub

复制公钥,然后登录你的sf帐号,切换到 “sourceforge.net/account/ssh”, 在 “Host Access Information ” 处点击 [Edit SSH Keys for Shell/CVS], 把 上述复制的字符粘贴进去。点击 update 即可。(这个选项在services的Edit SSH Keys for Shell/CVS下)
注:如果是两个KEY或者多个的话,要确保KEY与KEY之间有且只有一个回车,KEY中间不能有空格.
这是sourceforge的用法,若远程服务器为另一台VPS,那么应该按下面的方法做:

为了使用密钥,必须将公钥分发到欲登录的远程服务器上,这里远程服务器记为remote_host,欲登录的远程用户记为remote_user

1.copy公钥到欲登录的远程服务器的远程用户的家目录下,例如:

copy id_dsa.pub到remote_host:/home/remote_user/.ssh/

若目录/home/remote_user/.ssh/不存在,请先创建之.

2.将copy来的公钥文件改名为authorized_keys

3.修改公钥文件的访问权限

chmod 644 authorized_keys

三、脚本编写


#!/bin/bash
#你要修改的地方从这里开始
MAIL_FROM=xx@xx.com						#发信邮箱
MAIL_TO=tt@tt.com                 			#数据库发送到的邮箱
FTP_IP=username,projectname@web.sourceforge.net   #ftp地址,此处为sourceforge格式,若使用另一台vps作为备份服务器,直接用 username@remote_host即可。
FTP_backup=backup                          		#ftp上存放备份文件的目录,这个要自己得ftp上面建的
WEB_DATA=/home/wwwroot                   #要备份的网站数据
MYSQL_DATA=/usr/local/mysql/var				#数据库源文件路径

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz

#你要修改的地方从这里结束

#删除本地3天前的数据
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz
cd /home/backup


#压缩数据库源文件
tar zcvf /home/backup/$DataBakName $MYSQL_DATA
#压缩网站数据
tar zcvf /home/backup/$WebBakName $WEB_DATA


#上传到SFTP空间,删除SFTP空间5天前的数据
sftp $FTP_IP < < EOF
cd $FTP_backup
rm $OldData $OldWeb
-put $DataBakName
-put $WebBakName
quit
EOF

#发送数据库到Email,若不发送,下面代码可以删除.
echo "From:admin<$MAIL_FROM>" >>report.txt
echo "To: $MAIL_TO" >>report.txt
echo "Subject: 数据库备份完成" >>report.txt
echo "数据备份完成,以发送到指定服务器,以下是详细信息:" >>report.txt
du -m * >>report.txt
date >>report.txt
sendmail -t $MAIL_TO 

本文参考了一下文章:
在shell脚本里使用sftp批量传送文件:http://bbs.chinaunix.net/thread-508290-1-1.html
使用putty连接sourceforge:http://www.annhe.net/article-984.html
sendmail使用方法:http://3414033.blog.51cto.com/3404033/737481

2 thoughts on “VPS备份到远程FTP脚本

  1. 给脚本添加执行权限:

    chmod +x /root/AutoBackupToFtp.sh

    利用系统crontab实现每天自动运行:

    crontab -e

    输入以下内容:

    00 00 * * * /root/AutoBackupToFtp.sh

    其中00 00为时间分/小时,可自行修改,例如:30 12 ***,就是每天12.30运行这个脚本。

    附一个使用lftp备份文件

发表回复

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