之前介绍过百度云网盘备份网站文件的方式,但是不知道是不是百度推出百度会员的原因,上传速度越来越慢,甚至经常出现CALL API ERROR。所以,今天再介绍另一种备份方式:通过SFTP备份网站(用lftp传输备份文件),如果网站数据比较大可以买一些大硬盘的vps储存备份文件。
这种方式通过sftp连接另一台专门用来备份的vps(在vps上用sftp传输不需要安装ftp服务器,比较方便,但是可能安全性比ftp传输低一点吧)。
sftp可以通过以下命令登录:
- sftp -oPort=端口 用户名@IP
- #例子:
- sftp -oPort=22 admin@168.168.168.168
但是,这样并不能将密码一起输入直接登录。
毕竟用脚本备份追求的就是自动化嘛,所以我就采用另外一种登录方式:
用lftp命令登录
- lftp sftp://admin:password@168.168.168.168:22
- #或者:
- lftp -u admin,password sftp://168.168.168.168:22
下面先介绍几个常用的lftp命令(转自http://i.linuxtoy.org/docs/guide/ch42s04.html):
大多数图形界面的 ftp客户端,都有两栏窗口,一栏为本地目录,一栏为远程目录。lftp 也采用这种方式工作,只不过没有使用图形界面直观的显示
命令 | 本地 | 远程 |
---|---|---|
显示工作目录 | lpwd | pwd |
切换目录 | lcd | cd |
显示文件列表 | !ls | cls |
!ls -l | ls |
- 其中,
!
表示执行本地命令,lftp中没有与 ls 对应的本地命令 lls, 所以要使用 !ls 显示本地目录文件
使用以上命令确认当前工作目录的情况。以下命令用于从本地目录上传,或者从远程目录下载:
下载 | 上传 | |
---|---|---|
单个文件 | get | put |
多个文件 | mget | mput |
多线程 | pget | |
目录 | mirror | mirror -R |
- 在 lftp 配置文件
~/.lftp/rc
中设置 pget 使用的线程数- set pget:default-n 5
在远程目录中,可以使用以下命令操作文件
统计文件大小 | du |
移动、重命名 | mv |
删除 | rm |
创建文件夹 | mkdir |
删除文件夹 | rmdir |
使用 exit
命令退出 lftp(也可以使用bye命令~)
登录成功之后便进入对应目录上传文件
- lcd /data/local #进入本地目录
- cd /data/remote #进入远程目录
- put backup.zip #上传backup.zip到远程vps
下面是上传的脚本:(可自行修改,添加在上次发布的备份脚本的最后面)
- lftp -u USER,PASS sftp://IP:22<< EOF #登录sftp
- cd /backup #进入远程目录:backup
- lcd /local//backup #进入本地目录;local//backup
- mkdir backup_$(date +"%Y%m%d") #在远程目录创建文件夹
- cd backup_$(date +"%Y%m%d") #进入远程目录的文件夹
- put data_$(date +"%Y%m%d").zip #上传
- put web_$(date +"%Y%m%d").zip
- bye #断开连接
- EOF
- echo "upload competed~"