Criptografar vários arquivos de uma só vez

9

Estou escrevendo um script que cria archives de projeto e, em seguida, cria arquivos 7z deles para facilitar a gravação de versões específicas e manter backups criptografados.

Depois de gerar os arquivos e chegar à fase de criptografia, gostaria de criptografar os arquivos com uma chamada para gpg , se possível, para que o usuário insira a senha apenas uma vez. Caso contrário, teríamos que armazenar em cache a senha do usuário na memória (o que eu realmente gostaria de não fazer) ou fazer com que eles digam e confirmem sua frase secreta para cada projeto arquivado (o que é pior).

Existe uma maneira de passar vários nomes de arquivos para gpg para criptografar todos eles de uma só vez?

Se eu tentar isso:

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

... vejo o seguinte erro no shell:

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

Existe uma maneira de fazer o que eu pretendo realizar?

    
por Naftuli Kay 24.07.2012 / 18:36

7 respostas

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

Não, não há.

Você provavelmente desejará passar a senha com uma das seguintes opções gpg (a última opção seria mais segura):

--passphrase
--passphrase-file
--passphrase-fd
    
por 24.07.2012 / 21:35
10

Como o GnuPG não suporta isso diretamente, a maneira de fazer isso seria adicionar outra camada, por exemplo, usando tar .

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

E para extrair:

gpg -d projects.gpg | tar x

Você ficará com project1.7z e project2.7z . Seu roteiro pode continuar de onde você parou.

    
por 24.07.2012 / 22:16
3

Se você quiser tentar algo diferente, então o GPG tem outros métodos de backup para criptografar vários arquivos:

fonte original: link

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'"
}

Uso: basta usar "DIRETÓRIO DE backup" para criptografia e "descriptografar DIRECTORY.tar.gz.aes"

    
por 13.05.2014 / 19:47
1

Conseguiram fazer algo assim hoje:

  1. Alterou o diretório para o diretório que contém os arquivos de destino e executou um script Bash para localizar os nomes de arquivo necessários e listá-los em um arquivo de texto chamado found.txt .

  2. Executei um script Bash pedindo ao gpg2 para ler cada nome de arquivo em um loop e em uma variável de memória e no mesmo loop para criptografá-lo usando minha chave de assinatura e especificando que era para leitura por mim mesmo. O gpg2 coloca um pop-up para inserir sua frase-senha, em que o pop-up tem uma pequena caixa de seleção onde você pode optar por manter sua frase-ativa ativa para a sessão. Má prática, mas não tão ruim se você não estiver na Internet, e você desligará imediatamente após a sessão de criptografia.

  3. O único problema era que havia um y / n para ser tratado. Então sentei com meu dedo na tecla Y e criptografei 51 arquivos nos em menos de um minuto.

Os scripts são fornecidos abaixo:

O script 'find' era um arquivo chamado 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       

O script de criptografia foi chamado de 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"

Isso deve ser executado como um usuário comum:

$ bash ReadFilenameAndEncrypt.sh found.txt

Espero que isso ajude. Não descobri como evitar o y / n.

    
por 12.11.2016 / 15:43
0

O comando a seguir funciona para mim, desde que eu não tenha nenhum nome de arquivo com espaços neles.

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

Você também pode usar o comando "Localizar" também.

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

Por fim, se você quiser usar um arquivo para a senha, use:

--passphrase-file <filename>
    
por 16.08.2017 / 17:27
-1

Sim, existe uma maneira fácil:

for x in *; do 
  gpg -r (yourencrytionkey.com) -o $x.pgp -e $x
done
    
por 05.06.2014 / 23:36
-1

echo "Digite uma senha:"

ler senha

encontre. -tipo f -exec gpg --passphrase $ password -c {} \;

Hmmmmmm O GPG pergunta com uma GraphicMessageBox uma senha para cada arquivo.

Então, decidi usar o CRYBULL (programa de criptografia que criei) no C-ANSI. Você pode fazer o download gratuitamente no www.labolida.com

encontre. -type f -exec crybull {} {} criptografia $ password do cry.

    
por 18.12.2016 / 21:12

Tags