Расшифровать несколько файлов OpenPGP в каталоге

У меня есть несколько сотен gpg зашифрованных файлов в каталоге, в формате filename.xyz.gpg, где "xyz" - это какое-то произвольное расширение. Мне нужно расшифровать все файлы для генерации файла filename.xyz, дешифрованного таким образом, что мне не нужно вручную вводить пароль для каждого файла.

Я попробовал следующее для каталога "Тестирование":

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

Я просто завершаю командную строку > , и ничего не происходит.

В чем заключается мой синтаксис? Есть ли более эффективный способ сделать это без цикла оболочки bash?

Ответы

Ответ 1

Как сказано в руководстве, вам нужно добавить опцию --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.

Вы можете иметь любую из этих двух форм:

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

Или проще:

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

Вы можете попробовать script, чтобы извлечь ваши файлы:

#!/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

Ответ 2

gpg может дешифровать несколько файлов, поэтому вам не нужно писать цикл.

Попробуйте следующее. Вам нужно будет ввести пароль один раз.

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