在create上加密tar.gz文件

我有一个脚本,可以创建几个目录的夜间备份。

它是使用tar -czf创建的,目标tar.gz文件路径位于已安装的网络目录中。 生成的文件大约为1.2Gb。

网络速度相当快(从网络驱动器复制到本地的速度约为28MB /秒)。

现在我想使用公钥加密来加密tar.gz文件,然后再将其传输到网络驱动器,并想知道最好的方法是什么。

我应该首先在本地创建文件,加密它,然后复制? 或者有没有办法通过加密过程“流”tar输出,并将结果直接写入网络驱动器?

your_dir到加密存档中your_archive.tgz.gpg (对称加密):

 tar -cz your_dir | gpg -c -o your_archive.tgz.gpg 

打开包装:

 gpg -d your_archive.tgz.gpg | tar xz 

有关如何使用非对称加密而非对称加密的信息,请参阅GPG的文档。

以下过程首先加密本地磁盘上的文件,然后可以通过网络发送(或存储,但需要)


首先,生成公钥和私钥(仅执行一次):

 openssl genrsa -out key.pem 2048 openssl rsa -in key.pem -out key-public.pem -outform PEM -pubout 

然后,在每次备份时:

  1. 生成长随机密码,保存在文件中

    • echo -n "Tl4R6dnvWXiDeXr1LtpCNkyLG1" > key.txt
  2. 使用passphase加密文件

    • openssl enc -aes-256-cbc -pass file:key.txt < UNENCRYPTED_FILE > encrypted.dat
  3. 使用公钥加密密码

    • openssl rsautl -encrypt -pubin -inkey key-public.pem < key.txt > enc.key.txt

然后将encrypted.dat和enc.key.txt保存在所需的位置。


要解密:

  1. 使用私钥解密加密密码

    • openssl rsautl -decrypt -inkey key.pem < enc.key.txt > key.txt
  2. 解密文件

    • openssl enc -aes-256-cbc -d -pass file:key.txt < encrypted.dat > UNENCRYPTED_FILE

这比Florian的anwser要长很多,但我决定使用它,这样我就能更好地理解这个过程,而不依赖于服务器相关的GPG配置变量等。我也找不到任何有用的GPG文档。

我用非对称密钥加密做到这一点。 这意味着我有一个公钥(我可以与任何我想给我发送加密包的人共享),这允许我加密包。 我还有一个私钥(我不共享),它允许我解密包。

我加密当前工作目录的命令:-e加密,-r指定要使用的“收件人”或密钥,-o指定输出文件。

 $ tar -cvz . | gpg -e -r ABCD1234 -o backup.tgz.gpg 

并解密到当前工作目录:

 $ gpg -d backup.tgz.gpg | tar -xz 

或者解密为标准tgz文件以便以后解压缩:

 $ gpg -o backup.tgz -d backup.tgz.gpg 

当然,这仅在我已经生成公钥 – 私钥对并使用gpg安装时才有效。 在我的案例中,我使用了数字海洋指南, https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages-on-an-ubuntu -12-04-vps 。 加密命令中的ABCD1234是指我系统上安装的公钥之一。 本指南还介绍了如何共享公钥以及安装其他公钥以发送和接收加密文件。

GnuPG是我选择用于这个过程的,因为你已经说过解密步骤在哪里不透明(我同意这个用法实例)我也在问题的这一方面工作过。 检查项目的Travis-CI构建日志,了解当前按设计工作的function以及跟踪日志输出的travis.yml文件。 基本上你需要这个项目的三个脚本; 密钥生成脚本,解密帮助程序脚本和命名管道侦听器脚本。 密钥生成脚本和解密帮助程序脚本应该在将要执行解密的设备上使用,并且命名管道侦听器脚本应该在预先形成加密的设备上。

加密命名管道侦听器脚本在设置后接受字符串,文件路径或目录路径,并以可预测的方式输出加密结果。

下面是可以放入夜间备份脚本以进行加密和目录压缩+加密的示例命令

 echo "some messages text" > /path/to/named.pipe ## Message text is ASCII armor encrypted and appended to specified file when script was stated echo "${HOME}/Documents" > /path/to/named.pipe ## Directories are compressed with tar and encrypted with output to time stamped file in bulk output directory echo "${HOME}/.bash_history" > /path/to/named.pipe 

对于解密,您需要查看构建脚本.travis-ci/script_decrypt.sh.travis-ci/test_search_script_decrypt.sh如何恢复附加的加密数据字符串以及如何恢复批量文件/目录。

当然,对于这个实验性的东西,最好不要使用主键备份(有点为什么写入keygen脚本),并且在你对如何将其恢复为可读forms有信心之前不应该使用重要数据。