一次加密多个文件

一次加密多个文件

我正在编写一个脚本,该脚本创建项目档案,然后创建它们的 7z 档案,以便我更轻松地保存特定版本并保留加密备份。

在生成档案并进入加密阶段后,gpg如果可能的话,我想通过一次调用来加密文件,以便用户只输入一次密码。否则,我们要么必须将用户的密码短语缓存在内存中(我真的不想这样做),要么让他们为每个存档的项目输入并确认他们的密码短语(这更糟糕)。

有没有一种方法可以传递多个文件名以gpg使其一次性加密所有文件名?

如果我尝试这个:

$ gpg --cipher-algo AES256 --compression-algo BZIP2 -c project1.7z project2.7z

...我在 shell 中看到以下错误:

usage: gpg [options] --symmetric [filename]

有没有办法实现我想要实现的目标?

答案1

由于 GnuPG 不直接支持这一点,因此执行此操作的方法是添加另一个层,例如使用tar.

tar c project1.7z project2.7z | gpg --cipher-algo AES256 --compression-algo BZIP2 -co projects.gpg

并提取:

gpg -d projects.gpg | tar x

您将剩下project1.7zproject2.7z。然后您的脚本可以从您上次停下的地方继续。

答案2

Is there a way to pass multiple filenames to gpg to have it encrypt all of
them in one go?

不,那里没有。

您可能希望使用以下 gpg 选项之一传递密码(后者是最安全的选择):

--passphrase
--passphrase-file
--passphrase-fd

答案3

当前 gpg 有一个选项:

gpg --encrypt-files --recipient [email protected] *.txt

.txt.asc为每个文件生成一个文件.txt

参考:

答案4

今天成功地做了这样的事情:

  1. 将目录更改为包含目标文件的目录,然后运行 ​​Bash 脚本来查找所需的 file_names 并将它们列出到我称为 .txt 的文本文件中found.txt

  2. 运行一个 Bash 脚本,要求 gpg2 在循环中读取每个文件名并将其放入内存变量中,并在同一循环中使用我的签名密钥对其进行加密,并指定它供我自己读取。 gpg2 会弹出一个用于输入密码的弹出窗口,该弹出窗口有一个小复选框,您可以在其中选择在会话中保持密码短语处于活动状态。这是不好的做法,但如果您当时不在网络上,并且在加密会话后立即断电,那也不算太糟糕。

  3. 唯一的问题是有y/n需要处理。于是我把手指放在 Y 键上,不到一分钟就加密了 51 个文件。


脚本如下:

“查找”脚本是一个名为FindFilesAndListtoTextfile.sh

#! /usr/bin/bash
#Try this to list the files you want using the appropriate file identifier i.p.o "DSCN.*":

source="/home/myself/Whatever  #note no gaps on either side of the equal-to sign 
 target="/home/myself/Whatever/found.txt"
 find $source -name "*DSCN*" -type f > $target       

加密脚本名为 ReadFilenameAndEncrypt.sh:

#!/bin/bash
line="/home/myself/Whatever/found.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
    gpg2 -e -u mysecretkeyID -r mysecretkeyID "$line"
  done < "$1"

这将以普通用户身份运行:

$ bash ReadFilenameAndEncrypt.sh found.txt

希望这可以帮助。还没弄清楚如何避免 y/n。

相关内容