Criptografar vários arquivos de uma só vez


10

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

Depois de gerar os arquivos e chegar à fase de criptografia, gostaria de criptografar os arquivos com uma chamada, gpgse possível, para que o usuário insira sua 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 solicitá-las e confirmar sua senha para todos os projetos arquivados (o que é pior).

Existe uma maneira de passar vários nomes de arquivos para gpgcriptografar 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 estou procurando realizar?


2
Por que você está usando primeiro o 7zip (presumivelmente) para compactar e depois diz ao GnuPG para compactar novamente usando o bzip2? Não vejo isso ganhando muito em termos de eficiência de espaço e vejo que custa muito CPU.
um CVn

11
Existe uma maneira de passar vários nomes de arquivos para o gpg e criptografar todos eles de uma só vez? Sim, tente esta resposta
Anchan

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 passará a senha com uma das seguintes opções de gpg (a última seria a opção mais segura):

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

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.7ze project2.7z. Seu script pode então continuar de onde você parou.


3

Se você quiser tentar outra coisa, então GPG, existem outros métodos de backup para criptografar vários arquivos:

fonte original: 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`"
}

Uso: basta usar "backup DIRECTORY" para criptografar e "descriptografar DIRECTORY.tar.gz.aes"


1

Conseguiram fazer algo assim hoje:

  1. Alterei o diretório para o diretório que contém os arquivos de destino e executou um script Bash para encontrar os nomes de arquivo necessários e listá-los em um arquivo de texto que eu chamei 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 ser lido sozinho. O gpg2 cria um pop-up para inserir sua frase secreta, que pop-up possui uma pequena caixa de seleção onde você pode optar por manter sua frase secreta ativa para a sessão. Má prática, mas não tão ruim se você não estiver na Internet e desligar imediatamente após a sessão de criptografia.

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


Os scripts são apresentados 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 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 isto ajude. Ainda não descobri como evitar o y / n.


0

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

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 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

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

--passphrase-file <filename>

-1

Sim, existe uma maneira fácil:

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

-1

eco "Digite uma senha:"

ler senha

encontrar . -type f -exec gpg --passphrase $ senha -c {} \;

Hmmmmmm GPG solicita com uma GraphicMessageBox uma senha para cada arquivo.

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

encontrar . -type f -exec crybull {} {} .cry $ senha encode \;


Por favor, tente fazer respostas mais elaboradas. Além disso, esta pergunta já foi respondida. Leia as Perguntas frequentes para saber mais sobre como responder corretamente a perguntas .
zuazo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.