在网上找了一篇文章,说是《Linux操作系统上进行自动备份》。我按照里面的内容进行操作,却没办法做定时任务。现在整理一下那篇文章的内容,一是简化一下描述,二是防止链接失效。

 

首先介绍一下背景:

centos定期备份数据工具_centos定期备份数据工具

Server1是部署web应用的机器,或者说是需要进行备份的机器。Offsite storage server是备份存放的机器,以下简称为Offsite。

1. 以有权限ssh到server1的用户,登录到Offsite上

2. 确保Offsite上OpenSSH已经安装,并检查其版本,保证版本较新(4.3左右)

1 [Offsite]$ ssh -V

3. 在Offsite上生成公私密钥

1 [Offsite]$ ssh-keygen  -t  dsa
2 Generating public/private dsa key pair.   
3 Enter file in which to save the key(/home/accountname/.ssh/id_dsa):直接输入回车即可
4 Enter passphrase (empty for no passphrase):输入一个高强度密码
5 Enter same passphrase again: 再一次输入同一个密码   
6 Your identification has been saved in /home/accountname/.ssh/id_dsa.   
7 Your public key has been saved in /home/accountname/.ssh/id_dsa.pub.   
8 The key fingerprint is:   
9 7e:5e:b2:f2:d4:54:58:6a:fa:6b:52:9c:da:a8:53:1b accountname@offsite

 

上述代码中,-t 后面的dsa是一种数字签名算法,也可以改成OpenSSH支持的其他算法。上面代码中第三行,指定了生成的公私密钥文件的位置,accountname是当前Offsite的登录用户。如果想用默认路径,直接回车即可。最后生成的私钥文件是id_dsa, 公钥文件是id_dsa.pub。

4. 复制公钥文件到需要备份的机器上

这一步就是把Offsite上的id_dsa.pub复制到Server1上。具体操作如下:

1 [Offsite]$ scp  Offsite上的id_dsa.pub  accountname@server1的ip:Server1某个路径
2 accountname@server1.com's password: 输入accountname登录server1的密码,不是刚才生成公私密钥的密码

第一行代码中,scp后面第一个参数指定公钥文件(全路径), 第二个参数指定远程机器的登录用户名(accountname)、ip地址(server1的ip地址)以及公钥复制过去后存放的位置和名字(Server1的某个路径)。

5. 将Offsite的公钥添加到server1的已授权密钥列表中

1 [Server1]$ cat Offsite.pub >> /home/accountname/.ssh/authorized_keys
2 [Server1]$ chmod 700 /home/accountname/.ssh
3 [Server1]$ chmod 600 /home/accountname/.ssh/autorized_keys

假如没有authorized_keys这个文件,可以先创建,但是位置必须是在/home/accountname/.ssh下面。 此时,从Offsite上复制过来的公钥就可以删掉了。

6. 安装keychain

安装方法参考我的博文《CentOS安装keychain》。

7. 在Offsite上找到/home/accountname/.bash_profile, 在最后添加这样一句代码

1 eval  `keychain --agents ssh --eval id_dsa` || exit 1

注意代码中是反引号,不是单引号。保存文件。

 

重启Offsite,登录之后,会出现一个很小的窗口,需要输入刚才ssh-keygen创建公私密钥时输入的密码。登入系统后,就可以不再输入密码就能用OpenSSH从远程机器上复制内容到本地了。这样,可以在Server1上写备份脚本和删除脚本,在Offsite上远程调用备份脚本,并把备份复制到Offsite上,再执行Server1上的删除脚本。为了方便,可以在Offsite上写一个脚本,这样在Offsite上执行一个脚本,剩下的工作就是检查备份情况了。Offsite上的脚本大概是这样的:

 

#!/bin/bash
ssh accountname@server1的ip server1的脚本
scp accountname@server1的ip:server1的备份文件  本地路径
ssh accountname@server1的ip server1的脚本

 

遗憾的是,我把Offsite上的脚本设置为crontab自动执行,结果一直提示我说Permission Denied,Try again.不知道是怎么回事。大家谁知道,一定要告诉我哦。