一次加密多个文件


10

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

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

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

如果我尝试这样做:

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

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

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

有什么方法可以做我想要完成的事情?


2
为什么首先使用7zip(大概是)压缩,然后告诉GnuPG 使用bzip2 再次压缩?我看不到在空间效率方面能给您带来什么好处,而且确实会消耗大量CPU。
2014年

1
>是否可以将多个文件名一次性传递给gpg进行加密>所有这些文件名?是的,尝试这个答案
Anchan

Answers:


5
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

10

由于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。然后,您的脚本可以从上次停下来的地方继续学习。


3

如果您想尝试其他方法,那么GPG还有其他用于加密多个文件的备份方法:

原始来源:http : //www.obsd.hu/docs/Unix-backup-with-aes.txt

vi ~/.bashrc

backup() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'Did you do a screenshot of the Desktop and backup all the Bookmarks of the webbrowser and backup cronjobs, etc...?'
read
echo "START: `date`"
ORIGDIR="$1"; ORIGDIRNORM="`echo $ORIGDIR | sed 's/\/$//g'`"; tar cvf - "${ORIGDIRNORM}/" 2>/dev/null | gzip -9 - 2>/dev/null | openssl aes-256-cbc -salt -out "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" && cksum "${ORIGDIRNORM}-backup-${CURRENTDATE}.tar.gz.aes" >> checksum.txt
echo "END: `date`"
}

decrypt() {
if [[ "$1" = "" ]]; then echo 'specify full path' && exit 1; fi
CURRENTDATE="`date +%F-%Hh`"
echo 'This will decrypt the backup in the current working directory, are you sure?'
read
echo "START: `date`"
ORIGDIR="$1"
openssl aes-256-cbc -d -salt -in "${ORIGDIR}" | tar -xz -f -
echo "END: `date`"
}

用法:仅使用“备份目录”进行加密,然后使用“解密DIRECTORY.tar.gz.aes”


1

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

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

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

  3. 唯一的问题是要处理ay / n。因此,我用手指坐在Y键上,并在一分钟内对51个nos文件进行了加密。


脚本如下:

“查找”脚本是一个名为的文件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。


0

只要我没有任何带空格的文件名,以下命令对我有用。

for file in $(ls | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

您也可以使用find命令。

for file in $(find /home -type f | grep -v ".gpg"); do gpg -c --cipher-algo AES256 --compress-algo 1 --batch --passphrase "<password>" $file && rm -f $file; done

最后,如果要使用文件作为密码,请使用:

--passphrase-file <filename>

-1

是的,有一个简单的方法:

for x in *; do 
  gpg -r (yourencrytionkey.com) -o $x.pgp -e $x
done

-1

回显“输入密码:”

读取密码

找 。-f -exec gpg --passphrase $ password -c {} \;

Hmmmmmm GPG使用GraphicMessageBox询问每个文件的密码。

因此,我决定在C-ANSI中使用CRYBULL(我创建的密码程序)。您可以从www.labolida.com免费下载。

找 。-type f -exec crybull {} {} .cry $ password编码\;


请尝试做出更详尽的答案。另外,这个问题已经回答。阅读常见问题解答以学习热点,以正确回答问题
zuazo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.