如何使用 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>
就是这样!