Rsync:如何在接收端动态安装 truecrypt?

Rsync:如何在接收端动态安装 truecrypt?

简短版本:如何在 truecrypt 卷上保留 rsync 备份?困难的部分是在需要 rsync 时动态安装/卸载此卷。

细节

这是我当前的备份配置(大部分情况下运行良好):

  • 备份源是 Win7 64 位,目标是远程 Linux 机器(Debian)
  • 实际的数据传输是通过 ssh 的 rsync 完成的(使用 cygwin 的 cwRsync)
  • rsync 守护进程通过 ssh 按需启动

在 Linux 机器上,备份仅受文件权限保护。我想在这里提高安全性,并将备份放入 truecrypt 卷中。我可以在 shell 中手动将该卷安装到保险丝中。现在的问题是,我如何让 rsync 不仅打开 ssh 连接并启动 rsync 守护程序,而且还在之前安装 truecrypt 卷(并在之后卸载它)?

我看好--rsync-path可用于将命令行传递给 ssh 的选项 - 前提是 stdin 和 stdout 仍然正常工作。我猜该命令必须是 shell 脚本。这可能吗?脚本会是什么样子?

作为参考,以下是该选项的引述:

--rsync-path=PROGRAM

使用它来指定要在远程计算机上运行什么程序来启动 rsync。通常在 rsync 不在默认远程 shell 路径中时使用(例如--rsync-path=/usr/local/bin/rsync)。请注意,是PROGRAM在 shell 的帮助下运行的,因此它可以是您想要运行的任何程序、脚本或命令序列,只要它不会破坏 rsync 用于通信的标准输入和标准输出。

一个棘手的例子是在远程计算机上设置不同的默认目录以供选项使用--relative。例如:

rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/

这是完整的rsync 手册页

答案1

与此同时,我已经解决了所有问题,并且几周以来一直有一个对我有用的解决方案。如果有人感兴趣,我会在这里发布详细信息。这个文章特洛伊·约翰逊 (Troy Johnson) 的帮助一直帮助着我们。

先决条件

  • Truecrypt 安装在 Linux 上并位于以下路径中
  • TC 容器已准备好并可在/home/deepc/var/backup.tc
  • cygwin 和 rsync 安装在 Windows 上,可在以下路径上使用

Linux

我编写了两个 shell 脚本来在 Linux 机器上挂载和卸载 Truecrypt 容器。这些脚本通过 Windows 机器上的 ssh 远程调用:

〜/ bin / backup-mount.sh:

#!/bin/bash
# usage: backup-mount.sh <password>
~deepc/bin/backup-umount.sh
echo "$1" | sudo truecrypt -t --slot=2 -k "" --volume-type=normal --protect-hidden=no /home/deepc/var/backup.tc /home/deepc/mnt

〜/ bin /备份-umount.sh:

#!/bin/sh
sudo truecrypt -d /home/deepc/var/backup.tc

视窗

远程备份.cmd:

@echo off
setlocal
set HOME=c:\home
set LC_ALL=de_DE.utf-8
set LC_CTYPE=de_DE.utf-8
set LANG=de_DE.utf-8

rem --iconv=utf-16,iso-88591
ssh -p THESSHPORT -i ../.ssh/id_dsa [email protected] bin/backup-mount.sh THEPASSWORD
rsync -rltvzPm --modify-window=1 --exclude-from=../etc/backup/excludes.txt --chmod=ugo=rwX --delete --delete-excluded --files-from=../etc/backup/files-from.txt -e "ssh -p THESSHPORT -i ../.ssh/id_dsa" --log-file=../tmp/remote-backup.log /cygdrive [email protected]:/home/deepc/mnt
ssh -p THESSHPORT -i ../.ssh/id_dsa [email protected] bin/backup-umount.sh

将此批处理文件放入任务计划程序中,例如每日计划。务必调整用户名、远程主机、ssh 端口、Truecrypt 容器密码,当然还有备份路径。抱歉,我已经浪费了太多时间,无法再清理这些了……

使用此脚本,Rsync 将从两个文本文件中读取包含和排除的内容,例如:

文件来自.txt:

/c/Home/
/c/Users/deepc
...

排除.txt:

Firefox/Cache
Firefox/*.lock
Thunderbird/*.lock
Thunderbird/**/*Junk*
Thunderbird/**/filterlog.html
Thunderbird/**/*.msf
Home/tmp
...

完毕?

这回答了最初的问题。只有一个小问题:Windows 上的文件名中的特殊字符在 Linux 上是混乱的,因为 Linux 上的 TC 容器中使用了 ext2。我尝试了所有--iconv我能想到的参数组合,但都无济于事。看来我不得不忍受这一点——除非有勇敢的人读到这里,知道答案,并在评论中启发我 ;-)(容器中的 NTFS 不是一个选项)

答案2

我一直在尝试做类似的事情。我的笔记本电脑上有 Truecrypt 容器,我想将其与 NAS 上的某个位置同步。因为我想要双向同步,所以我一直在使用 Unison 而不是 rsync,但 Unison 实现了 rsync 协议,因此操作应该类似。

我曾使用过在 TC 容器卸载时对其进行同步的想法,并且依赖于这样一个事实:如果进行了少量数据更改,TC 只会更改容器的部分内容。但是,我发现的问题是由于容器的大小(20GB 或更大),同步仍然需要很长时间,因为目标(NAS)的 CPU 功率相当低,必须对整个容器文件进行校验和以确定它是否已更改。实际传输相当快,但之前有一段很长的时间会消耗 CPU。

因此,我转而采用 deepc 一直在研究的另一种方法,在远程端安装容器,然后同步内容。如果没有任何变化,这种方法要快得多,同步只需几秒钟(而另一种方法则需要 45 分钟以上)。最初阻碍我采用这种方法的唯一原因是我无法在我的 NAS(基于 Arm)上编译 TC,但现在我已经解决了这个问题,现在一切都运行得很好。

我认为 YMMV 和“真正的”rsync 在这方面可能比 Unison 更好。但我会选择同步容器的内容,而不是同步容器本身。

答案3

使用 truecrypt 命令行界面。

truecrypt --mount file --password=password

应该可以工作,truecrypt -h 应该可以给你一些想法。但是,密码必须以纯文本形式存储在 rsync 文件中。小心确保它不会出现在目标框中的某些 bash 历史记录中,否则增加的安全性将消失 - 恶意攻击者只需调用history | grep truecrypt,即可查看您的密码并获取您的备份。

答案4

实际上,这样做可能没有必要,因为看起来 rsync 可以有效地对 truecrypt 容器进行增量备份,而无需查看其内部。注意:我假设这样做的动机是为了获得增量复制的好处,这可能不是提问者的意图……

我们很高兴地报告,truecrypt 磁盘映像的内部结构使其能够有效地将其 rsync 到远程位置。这意味着在首次(完整)上传 TrueCrypt 磁盘映像后,后续上传将有效地仅传输自上次上传以来对加密文件系统所做的更改。

发现于http://www.rsync.net/resources/howto/windows_truecrypt.html 以及此评论主题中的引用:http://digg.com/news/technology/TrueCrypt_Tutorial_Truly_Portable_Data_Encryption

同步将不会重新发送整个文件,就像通常用 gpg 等加密的文件一样。Truecrypt 只会更改文件中需要更改的部分

我使用 --partial 和 --inplace 选项,效果非常好。通常每次传输 2-3 GB,具体取决于我那周的工作量...

我很快就会对此进行测试,并会在这里回复我的发现。

相关内容