Как использовать командную строку gpg для проверки правильности парольной фразы
Я пытаюсь автоматизировать резервное копирование с duplicity
, но когда я проверяю результат, я получаю
gpg: не удалось расшифровать открытый ключ: неверная парольная фраза
Я хочу проверить, действительно ли парольная фраза, которую я использую, является парольной фразой, связанной с соответствующим секретным ключом gpg, но я все равно не вижу в параметрах командной строки gpg, чтобы сказать: "не шифруйте и не расшифровывайте ничего. Просто подтвердите, что я использую правильный пароль."
этот предполагает, что, возможно, я (еще раз) неправильно понимаю Gnu Privacy Guard. (он имеет склонность насмехаться надо мной, пока я не заплачу.)
имеет ли смысл просить gpg проверить парольную фразу? Если да, то как?
1 ответ:
для этого нет встроенного метода, но достаточно просто создать тест, который ничего не изменяет и позволяет вам просто проверить свою парольную фразу.
вы не указали, поэтому я предположу, что вы используете версию GnuPG меньше, чем v2, и находитесь на Linux с Bash для интерпретатора командной строки.
Я дам команду здесь и ниже я объясню, что делает каждая часть - (Примечание: следующее Для версии серии GnuPG 1, см. ниже для GnuPG серия v2)
echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
что это делает, во-первых, труба какой-то текст, чтобы подписать GnuPG с
echo "1234" |
- потому что мы действительно не хотим ничего подписывать, это просто тест, поэтому мы подпишем какой-то бесполезный текст.Далее, мы говорим gpg не использовать ключевой агент с
--no-use-agent
; это важно позже, потому что, в зависимости от вашего ключевого агента, он может не возвращать "0" на успех, и это все, что мы хотим сделать - проверить успех вашей парольной фразы.далее, мы говорим gpg, чтобы поместить подписанные данные непосредственно в
/dev/null
file, что означает, что мы отбрасываем его и не записываем результат в терминал-Примечание: Если вы не используете какой-либо вариант Linux/Unix, этот файл может не существовать. В windows вам может потребоваться просто разрешить ему записывать подписанные данные на экран, просто опустив-o /dev/null
часть.Далее мы указываем ключ, с помощью которого мы хотим выполнить наш тест, используя
--local-user 012345
. Вы можете использовать KeyID для максимальной специфичности или использовать имя пользователя, в зависимости от того наилучшим образом соответствует вашим потребностям.Далее мы указываем
-as
, который включает режим вывода ascii и устанавливает контекстный режим для подписи. Элемент-
после этого просто говорит GnuPG, чтобы получить данные для подписи из standard-in, что является самой первой частью команды, которую мы далиecho "1234" |
.и последнее, у нас есть
&& echo "A message that indicates success"
-- " & & "означает, что если предыдущая команда была выполнена успешно, выведите это сообщение. Это просто добавлено для ясности, потому что успех команды выше будет в противном случае не будет указано никакого выхода вообще.Я надеюсь, что это достаточно ясно для вас, чтобы понять, что происходит, и как с ее помощью можно делать тестирование вы хотите сделать. Если что-либо непонятно или вы не понимаете, я буду рад прояснить. Удачи вам!
[EDIT] - если вы используете GnuPG v2, приведенная выше команда должна быть немного изменена, например:
echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"
причина в том, что GnuPG v2 ожидает, что парольная фраза будет полученные через агента, поэтому мы не можем отключить использование агента с
--no-use-agent
и имеют желаемый эффект; вместо этого нам нужно сказать GnuPG v2, что мы хотим запустить "пакетный" процесс, и получить парольную фразу из STDIN (standard in) с помощью опции--passphrase-fd 1
.