Подтвердить что ты не робот

Как использовать аргумент gnupg passphrase-fd?

Я хотел бы использовать команду decrypt GnuPG без какого-либо вмешательства пользователя. Аргумент script --passphrase-fd кажется именно тем, что мне нужно. Но я не знаю, как это работает - не нашли примеров.

Может ли кто-нибудь дать мне пример такой команды, как в средах Windows, так и в UNIX?

(FYI, я использую GnuPG 2).

Спасибо уже:)

4b9b3361

Ответ 1

Чтобы использовать опцию gpg --passphrase-fd в GnuPG v2, вы должны указать параметр --batch. Сначала я объясню, как работает --passphrase-fd, а затем перейдите к примерам.

--passphrase-fd сообщает GnuPG, что файловый дескриптор (-fd), чтобы ожидать, что кодовая фраза исходит. Стандартными файловыми дескрипторами являются STDIN (0), STDOUT (1) и STDERR (2). В контексте этого вопроса вы обычно будете беспокоиться только о STDIN (0).

Вы не указали, куда вы хотите получить фразу от фразы, поэтому я продемонстрирую использование STDIN (стандартное значение) различными способами.

--passphrase-fd 0 сообщает GnuPG, чтобы получить кодовую фразу от ввода в текущую оболочку; поэтому, например, если вы хотите, чтобы GnuPG получал данные кодовой фразы в самой следующей строке ввода в консоль, команда и вывод были бы такими:

gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
<next line of input is passphrase followed by hitting enter>
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
      "testkey4321 (4321) <[email protected]>"
this is a test... this is only a test...

В приведенном выше примере кодовая фраза была предоставлена ​​через дескриптор файла 0 (STDIN) - который мы предоставили, введя его в текущий стандартный ввод оболочки.

В следующем примере мы расскажем GnuPG, чтобы получить кодовую фразу из ввода в текущую оболочку, которая на самом деле является выходом другой команды (в этом случае эхо, которое просто "эхо", что вы ему скажете):

echo "mypassphrase" | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
      "testkey4321 (4321) <[email protected]>"
this is a test... this is only a test...

Другой пример, который выгружает содержимое файла, содержащего кодовую фразу, в STDIN -

cat /path/to/file_with_passphrase | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
      "testkey4321 (4321) <[email protected]>"
this is a test... this is only a test...

Итак, --passphrase-fd просто сообщает GnuPG, что вы хотите передать ему требуемую кодовую фразу через стандартный файловый дескриптор; разница между GnuPG v2 и GnuPG является просто параметром --batch.

Приведенные выше примеры должны работать одинаково в средах Windows и * nix, с той лишь разницей, что в Windows - в зависимости от вашей конфигурации и версии - вам придется заменить cat на type, чтобы сбросить содержимое файла в STDIN.

Ответ 2

Ответ на kylehuff по-прежнему не работает для меня, при этом gpupg все еще выдает подсказку с паролем.

В соответствии с https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase с gnupg версии 2.1.0 и выше вам необходимо выполнить дополнительные шаги для поддержки --passphrase-fd

Сначала отредактируйте конфигурацию gpg-agent, чтобы разрешить loopback-режим: ~/.gnupg/GPG-agent.conf

allow-loopback-pinentry

Перезапустите процесс gpg-agent, если он запущен, чтобы изменения вступили в силу.

Во-вторых, либо приложение необходимо обновить, чтобы включить параметр командной строки для использования режима петлевой проверки следующим образом:

$ gpg --pinentry-mode loopback ...

Ответ 3

Использование GPG4win/gpg 2.2.3: использовать passphrase-fd 0 и обходить приглашение, я могу подтвердить, что работает следующее:

--pinentry-mode loopback

Ответ 4

Как я уже давно это выяснил, я подумал, что стоит подумать.

Ответ на kylehuff очень хорош, если вы делаете decryping файлы, однако, если вам нужно перенаправление ввода/вывода, например, piping, здесь приведен пример использования дескриптора файла не 0 для передачи ключевая фраза.

#!/usr/bin/env bash
# Set some variables for easy modding
Var_fd='9'
Var_pass_location="/path/to/passphrase.file"
Var_gpg_decrypt_opts="--passphrase-fd ${Var_fd} --decrypt"
Var_output_location="out.txt"
Arr_string=( "[email protected]" )
# Open file descriptor and shove the passphrase file into it
exec ${Var_fd}<${Var_pass_location}
# Pipe input array though gpg and append to output file
cat <<<"${Arr_string[*]}" | $(which gpg) ${Var_gpg_decrypt_opts} >> ${Var_output_location}
# Do not forget to close the file descriptor
exec ${Var_fd}>&-

Предупреждайте, за исключением случаев специального использования, что сохранение секретной фразы ваших личных ключей обычно рассматривается как плохая идея или плохая практика безопасности. -И также, пожалуйста, не забудьте закрыть дескриптор, когда закончите, чтобы ваша кодовая фраза не была доступна с помощью этого метода. - Часто я видел, как в этих случаях использовались специально защищенные ключи, отличные от пароля, но это полностью ваш выбор, Если вам нравится приведенный выше код, вы можете также проверить script, который я отлаживал для генерации ключей без участия или участия, потому что он охватывает даже менее используемые параметры дескриптора файла gpg.

Редактирует/обновления

Итак, я отлаживал операции объемного дешифрования и имел доказательства, показывающие, что дескрипторы файлов закрываются автоматически или, возможно, автоматически закрываются GnuPG. Отметьте build 152 полностью в нижней части необработанных журналов, перед проверкой diff вы обнаружите, что первый блок зашифрованные данные используют кодовую фразу, оставляя следующие два блока данных без действительной кодовой фразы. Связанные сценарии в этой операции: сначала script_decrypt.sh build script устанавливает кодовую фразу тестового ключа в дескриптор файла 9, как показано в приведенных выше примерах, затем Помощник script вызывается таким образом, что он будет использовать этот файловый дескриптор... это забавный случай использования, но мораль этой истории кажется что все массовые операции дешифрования, которые вы планируете реализовать с помощью дескрипторов файлов GnuPG, скорее всего, должны будут следовать описанным выше шагам в целом, чтобы правильно восстановить дескрипторы файлов. Я буду переписывать вспомогательный script в течение следующих нескольких нажатий, поэтому проверьте Travis-CI журналы построения больше, чем 152, чтобы найти если у меня есть решение, где дескрипторы файлов закрываются...

... так что только две попытки заставить все работать, см. разницу в построении 154 как зашифрованный файл, так и исходный ввод log match. Как предполагалось, дескрипторы файлов сбрасываются после первого использования либо GnuPG, либо подкомпьютером, поэтому кодовая фраза должна быть назначена перед каждой командой дешифрования для дешифрования большого объема.

Надеюсь, это было ценно для вас.