Ошибка восстановления двойственности: нет секретного ключа
Я настраиваю резервное копирование с локального компьютера на удаленный сервер.
Я сгенерировал ключи gpg на локальной машине и запустил тестовую резервную копию с:
PASSPHRASE="MyGPGPassphrase" duplicity --encrypt-key KeyID test scp://user@server/path
Резервное копирование работает нормально, на сервере создано три файла.
Моя проблема в том, что я не могу восстановить работу.
Я удалил тестовый файл на локальной машине и попытался восстановить его с помощью:
PASSPHRASE="MyGPGPassphrase" duplicity --encrypt-key KeyID scp://user@server/path test
Я получаю следующую ошибку:
Synchronizing remote metadata to local cache...
Copying duplicity-full-signatures.20151011T011134Z.sigtar.gpg to local cache.
GPGError: GPG Failed, see log below:
===== Begin GnuPG log =====
gpg: encrypted with 2048-bit RSA key, ID KeyID(of ssb), created 2015-10-11
"Name <email>"
gpg: public key decryption failed: Inappropriate ioctl for device
gpg: decryption failed: No secret key
===== End GnuPG log =====
Я экспортировал ключи gpg на локальную машину:gpg --export-secret-key KeyID > secret.key
gpg --armor --export KeyID > public.key
И импортировал их на сервер с помощью:gpg --import secret.key
gpg --import public.key
Есть ли что-то еще, что нужно сделать, чтобы восстановление работало?
Редактировать:
Если я выполню команду без PASSPHRASE env duplicity --encrypt-key Key D test scp://user@host/path
резервная копия создается в любом случае без запроса пароля.
Выход из file duplicity-full.20151011T115714Z.vol1.difftar.gpg
перечисляет другой KeyID, чем тот, который указан в --encrypt-key. У меня нет указанного ключа в моей связке ключей.
3 ответа
Проблема заключается в том, что, как указано в сообщении, связанном с тем, что gpg 2.1 удаляет парольную фразу из канала для аутентификации ключа.
Агенты gpg должны быть включены и настроены для восстановления для работы.
Добавьте следующее к ~/.gnupg/gpg.conf
:
use-agent
pinentry-mode loopback
И вашему ~/.gnupg/gpg-agent.conf
:
pinentry-program /usr/bin/pinentry-gtk-2
allow-loopback-pinentry
Затем перезапустите агент с echo RELOADAGENT | gpg-connect-agent
,
Восстановление работает, даже если ключи находятся только на локальной машине. Я до сих пор не понимаю, почему он не запрашивает парольную фразу при создании инкремента.
Вы используете gpg 2.1? если да, для duplicity и gpg нужны дополнительные параметры, если вы хотите передать фразу-пароль через env var.
https://lists.launchpad.net/duplicity-team/msg02653.html
В качестве альтернативы просто не устанавливайте PASSPHRASE, и gpg-agent спросит вас и запомнит для вас секрет.
У меня была эта проблема при использовании sudo
выполнить duplicity
, что заставляет его искать закрытый ключ в root
домашний каталог. Не найдя на нем секретного ключа, появляется ошибка "Нет секретного ключа", и - по крайней мере, для меня - не сразу понятно, почему.
Наиболее простым решением этой проблемы было избежать использования sudo
, в моем случае, установив правильные разрешения на каталог назначения.
Если sudo
является обязательным, тогда необходимо установить соответствующие параметры GPG, чтобы он использовал цепочку ключей GPG пользователя: добавление --gpg-options "~user/.gnupg"
к команде duplicity, как указано в этом ответе
Может быть, это помогает кому-то еще:-)