2013-09-12 6 views
17

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

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

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

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

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

+0

Может быть обменный эхо-пароль с помощью команды gpg? Echo'ing пароль перед командой в порядке? – aso

ответ

13

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

Вы можете попробовать сценарий, как это, чтобы извлечь файлы:

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

Да, теперь он работает с опцией -batch, спасибо. – user1815498

+0

Не уверен, что это хорошая фраза в командной строке, так как тогда она становится видимой для всех пользователей в системе с использованием ps и подобных инструментов. – BenKennish

+0

@BenKennish Да, это уже само собой разумеющееся. – konsolebox

18

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

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

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

Спасибо, что, конечно, упрощает. Я также нашел некоторую документацию, предлагающую использовать -multifile для подобных ситуаций, так что кодовую фразу нужно вводить только один раз. Кстати, мне нравится ваш аватар с жуком! – user1815498

+1

спасибо. Если вы заинтересованы, это [собачий листок-жук] (http://www.museum.state.il.us/muslink/prairie/htmls/popups/insects_dgbeetle.html)! – dogbane

+0

- файлы -decrypt должны быть такими же, как -multifile -decrypt в любом случае. – Ben

Смежные вопросы