Вопрос или проблема
недавно обновился до версии gpg 2.2.24
Ошибка:
gpg: расшифровка открытым ключом не удалась: Доступ запрещен
gpg: расшифровка не удалась: Нет секретного ключа
gpg –list-secret-key перечисляет все секретные ключи из /opt/eventapi/.gnupg/pubring.gpg.
Вопрос: Как загрузить фразу-пароль gpg через gpg-agent –allow-preset-passphrase в gpg 2.2.24?
Ранее в gpg 2.0.20 для расшифровки файла с использованием секретного ключа необходимо было вводить фразу-пароль.
Это делается через скрипт, указанный ниже, с использованием gpg-агента preset>
#!/bin/sh
RUNAS_USER=usr
GPG_PASSPHRASE_BIN_PATH=/usr/libexec/gpg-preset-passphrase
[[ "$RUNAS_USER" != "$(id --user --name)" ]] && { echo 'Прерывание, не ожидаемый RUNAS_USER.'; exit 1; }
# будет работать только как usr
killall --user "$RUNAS_USER" gpg-agent 1>/dev/null 2>&1
sleep 2
eval $(gpg-agent --daemon --allow-preset-passphrase --max-cache-ttl 63115200 > ~/.gnupg/.env_vars.txt)
source ~/.gnupg/.env_vars.txt
ps xuf
read -p 'Введите >> PASS << фразу-пароль GPG :' -s PASS; echo
echo; echo
GPG_PASS="$PASS"
echo "$GPG_PASS" | "$GPG_PASSPHRASE_BIN_PATH" --preset XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # sec
echo "$GPG_PASS" | "$GPG_PASSPHRASE_BIN_PATH" --preset XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # ssb
# Провести тестовую расшифровку
md5=$(gpg --batch --quiet --decrypt EncryptedTestFile.gpg | md5sum --tag | sed -n -e 's/^.*= //p')
if [ 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' == "$md5" ]
then
echo "Тестовая расшифровка ОК"
else
echo "Ошибка при расшифровке тестового файла, попробуйте запустить этот скрипт снова"
fi
Но запуск того же скрипта приводит к следующему результату
gpg: расшифровка открытым ключом не удалась: Доступ запрещен
gpg: расшифровка не удалась: Нет секретного ключа
Даже после ввода пароля вручную через xterm проблема не решается окончательно.
Как сделать gpg-agent preset как указано выше в gpg 2.2.24
Ответ или решение
Решение проблемы с GPG 2.2.24: Ошибка «Permission denied» и «No secret key»
Введение
Переход на новую версию GPG, такую как 2.2.24, может привести к ряду проблем, связанных с изменениями в конфигурации и взаимодействием с ключами. Ошибка, с которой вы столкнулись: gpg: public key decryption failed: Permission denied
и gpg: decryption failed: No secret key
, указывает на то, что GPG не может получить доступ к секретным ключам или данным для расшифровки файлов. Давайте рассмотрим, как правильно настроить gpg-agent и использовать preset для ввода пароля.
1. Проверка прав доступа
Первым шагом является убедиться, что у вас есть необходимые права на доступ к директории, где размещены секретные ключи. По умолчанию, GPG хранит ключи в ~/.gnupg
. Убедитесь, что у вашего пользователя есть права на чтение и запись в эту директорию:
ls -ld ~/.gnupg
Если права некорректные, исправьте их:
chmod 700 ~/.gnupg
chown -R $(whoami):$(whoami) ~/.gnupg
2. Использование gpg-agent
В GPG 2.2.24 произошли изменения, касающиеся работы с gpg-agent. Убедитесь, что gpg-agent запущен и настроен корректно. Вы можете инициализировать gpg-agent с параметрами:
gpg-agent --daemon --allow-preset-passphrase --max-cache-ttl 63115200
Не забудьте, что для использования функции preset нужно, чтобы gpg-agent был правильно установлен и запущен.
3. Настройка передачи паролей в gpg-agent
Убедитесь, что в вашей системе установлен gpg-preset-passphrase
, и вызовите его с правильным ключом. Ваша ошибка может быть связана с недопустимым идентификатором ключа. Убедитесь, что вы используете корректный идентификатор секретного ключа.
Ваш скрипт для передачи пароля может быть изменен следующим образом:
#!/bin/sh
RUNAS_USER=usr
GPG_PASSPHRASE_BIN_PATH=/usr/libexec/gpg-preset-passphrase
if [[ "$RUNAS_USER" != "$(id --user --name)" ]]; then
echo 'Aborting, not the expected RUNAS_USER.';
exit 1;
fi
# Остановка gpg-agent
killall --user "$RUNAS_USER" gpg-agent >/dev/null 2>&1
sleep 2
# Запуск gpg-agent
eval $(gpg-agent --daemon --allow-preset-passphrase --max-cache-ttl 63115200 > ~/.gnupg/.env_vars.txt)
source ~/.gnupg/.env_vars.txt
# Ввод пароля
read -p 'Enter GPG passphrase: ' -s PASS; echo
echo
# Предварительное размещение пароля
echo "$PASS" | "$GPG_PASSPHRASE_BIN_PATH" --preset КЛЮЧ_СЕКРЕТА
# Тестирование расшифровки
md5=$(gpg --batch --quiet --decrypt EncryptedTestFile.gpg | md5sum --tag | sed -n -e 's/^.*= //p')
if [ 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' == "$md5" ]; then
echo "Decryption test OK"
else
echo "Error decrypting testfile, try running this script again"
fi
4. Дополнительные проверки
- Убедитесь, что публичные и секретные ключи корректны и не повреждены.
- Проверьте конфигурацию файла
gpg.conf
, особенно в части, касающейся использования gpg-agent. - Если всё ещё возникают проблемы, попробуйте удалить и заново импортировать ключи.
Заключение
Проблема с ошибками декодирования после обновления до GPG 2.2.24 может быть решена с помощью корректных прав доступа, проверки настроек gpg-agent и правильной настройки передач паролей через gpg-preset-passphrase. Убедитесь, что все ключи доступны и правильно настроены, что должно позволить вам безболезненно шифровать и расшифровывать информацию. Обратите внимание на изменения в документации GPG при переходе на более новые версии.