Вопрос или проблема
Когда я использую GPG для расшифровки упакованной и зашифрованной резервной копии, я планирую использовать скрипт, который перебирает старые пароли, чтобы мне не приходилось регулярно их менять. Однако при тестировании этого gpg никогда не завершает работу после попытки использования ключа и вывода gpg: расшифровка не удалась: Неверный сеансовый ключ
, поэтому я никогда не могу попытаться снова. Я надеюсь, что это просто какая-то опечатка, которую я не вижу.
Команда, которую я выполняю, выглядит так:
gpg (GnuPG) 2.2.27
libgcrypt 1.9.4
gpg --debug-all --pinentry-mode loopback --batch --yes --cipher-algo AES256 --passphrase-file ~/.curpass --decrypt /mnt/data-disk/backups/series-2024-10-01/2024-10-01_07-00-02_full/data.xbstream.zs.aes256 > /mnt/data-disk/backups/series-2024-10-01/2024-10-01_07-00-02_full/data.xbstream.zs 2> log.txt
log.txt:
gpg: чтение параметров из '[cmdline]'
gpg: включены отладочные флаги: packet mpi crypto filter iobuf memory cache memstat trust hashing ipc clock lookup extprog
gpg: DBG: [не включено в исходнике] начало
gpg: DBG: fd_cache_open (/mnt/data-disk/backups/series-2024-10-01/2024-10-01_07-00-02_full/data.xbstream.zs.aes256) не закэшировано
gpg: DBG: iobuf-1.0: открыть '/mnt/data-disk/backups/series-2024-10-01/2024-10-01_07-00-02_full/data.xbstream.zs.aes256' desc=file_filter(fd) fd=4
gpg: DBG: iobuf-1.0: недоступный поток: размер буфера: 8192; еще в буфере: 0 => место для 8192 байтов
gpg: DBG: iobuf-1.0: недоступный поток: A->FILTER (8192 байт)
gpg: DBG: iobuf-1.0: A->FILTER() вернул rc=0 (ок), прочитано 8192 байта
gpg: DBG: parse_packet(iob=1): type=3 length=13 (parse.../../g10/mainproc.c.1560)
gpg: AES256.CFB зашифрованные данные
gpg: DBG: free_packet() type=3
gpg: DBG: iobuf-1.1: push 'block_filter'
gpg: DBG: iobuf chain: 1.1 'block_filter' filter_eof=0 start=0 len=0
gpg: DBG: iobuf chain: 1.0 'file_filter(fd)' filter_eof=0 start=17 len=8192
gpg: DBG: init block_filter 0x000060965f395d90
gpg: DBG: parse_packet(iob=1): type=18 length=0 (new_ctb) (parse.../../g10/mainproc.c.1560)
gpg: DBG: iobuf-1.1: недоступный поток: размер буфера: 8192; еще в буфере: 0 => место для 8192 байтов
gpg: DBG: iobuf-1.1: недоступный поток: A->FILTER (8192 байт)
gpg: DBG: iobuf-1.0: недоступный поток: размер буфера: 8192; еще в буфере: 0 => место для 8192 байтов
gpg: DBG: iobuf-1.0: недоступный поток: A->FILTER (8192 байт)
gpg: DBG: iobuf-1.0: A->FILTER() вернул rc=0 (ок), прочитано 8192 байта
gpg: DBG: iobuf-1.1: A->FILTER() вернул rc=0 (ок), прочитано 8192 байта
gpg: зашифровано с 1 паролем
gpg: расшифровка не удалась: Неверный сеансовый ключ
gpg: DBG: free_packet() type=18
gpg: DBG: iobuf-1.1: недоступный поток: размер буфера: 8192; еще в буфере: 0 => место для 8192 байтов
gpg: DBG: iobuf-1.1: недоступный поток: A->FILTER (8192 байт)
gpg: DBG: iobuf-1.0: недоступный поток: размер буфера: 8192; еще в буфере: 0 => место для 8192 байтов
gpg: DBG: iobuf-1.0: недоступный поток: A->FILTER (8192 байт)
gpg: DBG: iobuf-1.0: A->FILTER() вернул rc=0 (ок), прочитано 8192 байта
gpg: DBG: iobuf-1.1: A->FILTER() вернул rc=0 (ок), прочитано 8192 байта
gpg: DBG: iobuf-1.1: недоступный поток: размер буфера: 8192; еще в буфере: 0 => место для 8192 байтов
gpg: DBG: iobuf-1.1: недоступный поток: A->FILTER (8192 байт)
gpg: DBG: iobuf-1.0: недоступный поток: размер буфера: 8192; еще в буфере: 0 => место для 8192 байтов
gpg: DBG: iobuf-1.0: недоступный поток: A->FILTER (8192 байт)
Ответ или решение
Проблема зависания GPG 2 при вводе неверной парольной фразы
Использование GnuPG (GPG) для расшифровки зашифрованных резервных копий является распространенной практикой среди IT-специалистов. Однако некоторые пользователи сталкиваются с проблемами, когда GPG зависает после попытки расшифровки с неправильной парольной фразой, как это описано в вашем случае. Давайте рассмотрим причины данной проблемы и возможные решения.
Описание проблемы
Вы используете следующую команду GPG:
gpg --debug-all --pinentry-mode loopback --batch --yes --cipher-algo AES256 --passphrase-file ~/.curpass --decrypt /mnt/data-disk/backups/series-2024-10-01/2024-10-01_07-00-02_full/data.xbstream.zs.aes256 > /mnt/data-disk/backups/series-2024-10-01/2024-10-01_07-00-02_full/data.xbstream.zs 2> log.txt
В процессе выполнения вы получаете сообщение об ошибке gpg: decryption failed: Bad session key
, но GPG не завершается и продолжает зависать, не позволяя вам попытаться ввести другую парольную фразу.
Возможные причины зависания
-
Неправильный режим взаимодействия с пользователем: Вы используете параметр
--pinentry-mode loopback
, что позволяет GPG запрашивать ввод парольной фразы в командной строке. Однако, еслиpinentry
не подключен правильно, это может вызвать зависания. -
Обработка ошибок в GPG: При вводе неверной парольной фразы GPG может пытаться обработать сессии, которые не завершились корректно, что приводит к зацикливанию и зависанию процесса.
-
Конфликты с библиотеками или окружением: Ваше окружение может иметь конфликты с библиотеками или установленным ПО, что также может вызывать зависания программы.
Рекомендуемые решения
-
Проверка параметров конфигурации: Убедитесь, что в конфигурационных файлах GPG (например,
~/.gnupg/gpg.conf
) нет конфликтующих настроек. Попробуйте временно удалить или изменить настройки, чтобы увидеть, повлияет ли это на проблему. -
Использование флага
--batch
: Убедитесь, что вы работаете в пакетном режиме. В вашем случае этот флаг уже указан, и это правильно, так как он предотвращает интерактивные запросы. Однако, иногда стоит проверить, не конфликтуют ли другие параметры командной строки. -
Оптимизация использования
pinentry
: Попробуйте явно указатьpinentry
в конфигурации. Например, если вы используетеpinentry-tty
, включите его в настройках. Это может помочь избежать проблем при вводе неверной парольной фразы. -
Проверка записей в
log.txt
: Изучите лог-файл для выявления дополнительных подсказок, которые могут указывать на причину зависания. Обратите внимание на любые необычные или ошибочные сообщения. -
Обновление ПО: Убедитесь, что у вас установлена последняя версия GnuPG и связанных библиотек. Иногда проблемы зависания могут быть устранены с помощью обновлений, которые исправляют известные ошибки.
-
Изменение метода тестирования: Вместо зацикливания по старым парольным фразам, рассмотрите возможность создания списка парольных фраз и использования более простой логики, которая проверяет одну фразу и завершает работу GPG перед следующей пробой.
Заключение
Проблемы с зависанием GPG при использовании неверных парольных фраз могут быть вызваны множеством факторов. Используя вышеописанные рекомендации, вы можете диагностировать и устранить проблему. Важно создать рабочий процесс, который позволит вам эффективно управлять доступом к зашифрованным данным, избегая раздражающих зависаний. Если проблемы продолжают возникать, рекомендуется обратиться за поддержкой к сообществу GnuPG или к профессиональным специалистам по информационным технологиям.