web-dev-qa-db-fra.com

décrypter plusieurs fichiers OpenPGP dans un répertoire

J'ai plusieurs centaines de fichiers cryptés gpg dans un répertoire, au format filename.xyz.gpg où "xyz" est une extension quelconque. Je dois déchiffrer tous les fichiers pour générer nomfichier.xyz déchiffré de manière à ne pas avoir à saisir manuellement le mot de passe pour chaque fichier.

J'ai essayé ce qui suit pour le répertoire "Testing":

for file in 'ls Testing'; do (echo <password>|gpg --passphrase-fd 0 -d $file 
--output     $file.decrypted);

Je viens de terminer avec une invite de commande>, et rien ne se passe.

Quel est le problème avec ma syntaxe? Existe-t-il un moyen plus efficace de procéder sans une boucle Shell bash?

18
user1815498

Comme il est dit dans le manuel, vous devez ajouter l'option --batch:

   --passphrase-fd n
          Read the passphrase from file descriptor n. Only the first line will be read from file descriptor n. If you use 0 for n, the passphrase will be read from
          STDIN. This can only be used if only one passphrase is supplied.  Note that this passphrase is only used if the option --batch has also been given.  This is
          different from gpg.

   --passphrase string
          Use string as the passphrase. This can only be used if only one passphrase is supplied. Obviously, this is of very questionable security on a multi-user sys‐
          tem. Don't use this option if you can avoid it.  Note that this passphrase is only used if the option --batch has also been given.  This is different from
          gpg.

Vous pouvez avoir l’une de ces deux formes:

echo "passphrase" | gpg --passphrase-fd 0 --batch -d --output "decrypted.file" "file.gpg"

Ou plus simple:

gpg --passphrase "passphrase" --batch -d --output "decrypted.file" "file.gpg"

Vous pouvez essayer un script comme celui-ci pour extraire vos fichiers:

#!/bin/bash

read -rsp "Enter passphrase: " PASSPHRASE

for FILE in *.*.gpg; do
    echo "Extracting $FILE to ${FILE%.gpg}."
    echo "$PASSPHRASE" | gpg --passphrase-fd 0 --batch -d --output "${FILE%.gpg}" "$FILE"
done
14
konsolebox

gpg peut décrypter plusieurs fichiers, vous n'avez donc pas besoin d'écrire une boucle.

Essayez ce qui suit. Vous devrez entrer votre mot de passe une fois.

gpg --passphrase-fd 0 --decrypt-files *.gpg 
22
dogbane

J'ai eu du succès avec

gpg --decrypt-files *.gpg

cf. https://serverfault.com/a/388068/103585

1
Gabe Kopley

J'ai eu du succès avec gpg --decrypt-files * Mais pas * .gpg

0
Ong Ming Soon