背景

背景

如何使用 cron、gpg 加密和 ssh 后端自动执行 duplicity 备份?

答案1

背景

原文参考:http://peterpetrakis.blogspot.com/2013/06/automating-and-encrypting-duplicity.html

过去曾遭受过数据丢失和存储被黑客攻击,因此定期备份是个好主意。我希望在本地服务器发生故障时有冗余,并且希望使用受密码保护的 gpg 密钥加密备份。

当前解决方案使用在备份路径之外以纯文本保存的密码短语。我计划研究将 gpg 密钥移至智能卡并使用 pin 密钥将其解锁。如果有人有任何其他解决方案,请详细描述它们。

保留必需的环境变量

从 cron 运行任何程序都会将其与当前环境分离,您会丢失描述诸如 ssh-agent gpg-agent 之类的变量以及开始与远程服务器通信所需的内容。

我采取了一种简单的方法,在我的 ~.bashrc 中创建了以下内容。

cat > ~/.backenvrc << EOF
# 由 crontab 备份脚本使用
导出 SSH_AGENT_PID=$SSH_AGENT_PID
导出 SSH_AUTH_SOCK=$SSH_AUTH_SOCK
导出 GPG_AGENT_INFO=$GPG_AGENT_INFO
导出 GPGKEY=XXX-在此处插入您的 gpg 密钥-XXX
末梢血

并从我的 crontab 中引用的备份脚本中获取此信息,我只需要登录一次即可填充此文件。

设置 Crontab

# crontab -l
# mh dom mon dow 命令
MAILTO=ppetraki@localhost
BACKUP=/home/ppetraki/Documents/System/Backup
#
0 0 * * * /usr/bin/crontab -l > $BACKUP/crontab-backup
0 0 * * * /usr/bin/dpkg --get-selections > $BACKUP/installed-software
0 0 * * * /usr/local/bin/ppetraki-backup.sh inc
0 0 * * 周五 /usr/local/bin/ppetraki-backup.sh 已满

请注意,我还备份了我的 crontab 和已安装软件列表,最终我将把它移到另一个脚本中,该脚本还会执行以下操作

1)备份我的 Chrome 和 Firefox 书签

2)以非二进制格式备份邮件

当前的 cron 格式每晚执行一次增量备份,每周五执行一次完整备份。

驱动脚本

这包装了 duplicity 的调用并获取了必要的环境变量。Duplicity 本身可能因为所有命令行开关而变得棘手,如果您有多个目标,则负担会更大。我有冗余备份,首先是本地服务器,然后是 rsync.net 提供的远程服务(很棒的客户支持!)。我发现 魂器成为一个出色的,轻量的,重复的包装器以满足我的需求。

驱动程序脚本位于我的备份路径之外,还包含我的 GPG 密码,用于加密我的备份。最终,我希望转移到智能卡驱动的系统 [如图所示] (http://blog.josefsson.org/2011/10/11/unattended-ssh-with-smartcard/

[/usr/local/bin/ppetraki-backup.sh]

/bin/bash #!/bin/bash

导出 PATH=$PATH:/usr/local/bin
动作=$1

导出用户=XXX
导出HOME=/home/$USER

源$HOME/.backenvrc

echo“验证环境”
回显“gpg-agent:${GPG_AGENT_INFO}”
回显“gpg 密钥:${GPGKEY}”
回显“ ssh-agent-pid:$ {SSH_AGENT_PID}”
回显“ ssh-auth-sock:$ {SSH_AUTH_SOCK}”

如果 [ -z $action ]; 那么
  echo“需要采取行动!”
  出口 1

导出密码=

[ -z $PASSPHRASE ] && 退出 1

回显“开始”

用于在 local_backup remote_backup 中进行配置
  魂器清理 $config
  魂器 $action $config
完毕

使用魂器来解决谎言

Horcrux 有配置文件的概念,可以消除管理 duplicity CLI 的所有复杂性。以下是配置文件的示例。

cat /home/ppetraki/.horcrux/local_backup-config
destination_path="rsync://192.168.1.XXX/backups/personal"
cat ~/.horcrux/local_backup-exclude
- /主页/ppetraki/沙盒
- /主页/ppetraki/Bugs
- /home/ppetraki/下载
- /home/ppetraki/视频
- /home/ppetraki/.xsession-错误
- /home/ppetraki/.缩略图
- /home/ppetraki/.local
- /home/ppetraki/.gvfs
- /home/ppetraki/.systemtap
- /home/ppetraki/.adobe/Flash_Player/AssetCache
- /home/ppetraki/.thunderbird
- /home/ppetraki/.mozilla
- /home/ppetraki/.config/google-googletalkplugin
- /home/ppetraki/.config/google-chrome
-/home/ppetraki/.cache
- /home/ppetraki/**[cC]ache*

我发现仅备份 mozilla 和 google-chrome 之类的子目录是有问题的,相反,我将编写一个额外的脚本来挑选这些文件进行备份。

魂器主配置文件

猫〜/.horcrux/horcrux.conf
source="/home/ppetraki/" # 确保尾部有斜杠
encrypt_key=XXXXXX # 用于加密备份的公钥 ID
sign_key='-' # 用于签署备份的密钥 ID(保留为 '-' 表示不签署)

use_agent=false # 使用 gpg-agent?
remove_n=3 #要删除的完整文件集的数量
verbosity=5 # 记录所有文件更改(参见 duplicity 手册页)
vol_size=25 # 将备份分成 25MB 的卷
full_if_old=30D # 使“full”操作执行完整的
                         # 如果超过 360 天则备份
backup_basename='backup' # 本地备份的目录名称(即目标
                         # /Volumes/my_drive/backup/ 或 /media/my_drive/backup/)
dup_params='--use-agent' # 传递给 Duplicity 的参数

这非常棒,因为它将备份调用减少到如下程度:

$ horcrux inc local_backup

监控

我在 crontab 中定义了 MAILTO,还安装了 mutt 和重新配置的 postfix 以进行本地邮件传递。每天晚上我都会收到一份关于备份运行情况的进度报告。

结论

我花了不少时间来确定如何实现自动化并提供强加密。希望您觉得这很有用。

答案2

您可以使用 duplicity-automate (http://duplicity-auto.sf.net/)。

它支持良好的 XML 语法,并有一些用于制作 MySQL/PostgreSQL 数据库转储的处理程序。

只需定义两个文件,例如:

<?xml version="1.0"?>
<duplicity-automate>
 <backups>
   <backup type="dir">
     <passphrase>abcdef</passphrase>
     <remote-name>home</remote-name>
     <local-path>/home</local-path>
     <expiry-period>1Y</expiry-period>
   </backup>

   <backup type="dir">
     <passphrase>qwerty</passphrase>
     <remote-name>config</remote-name>
     <local-path>/etc</local-path>
     <expiry-period>1Y</expiry-period>
   </backup>
 </backups>
</duplicity-automate>

<?xml version="1.0"?>
<duplicity-automate>
 <servers>
   <server>
     <protocol>ftp</protocol>
     <username>john</username>
     <hostname>example.com</hostname>
     <password>1234</password>
     <path>mydirectory/backups</path>
   </server>
 </servers>
</duplicity-automate>

就是这样!

相关内容