Не удалось восстановить Duplicity: нет секретного ключа

Не удалось восстановить Duplicity: нет секретного ключа

Я настраиваю резервное копирование с локальной машины на удаленный сервер.
Я сгенерировал ключи 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. Указанного ключа нет в моей связке ключей.

решение1

Проблема в том, что, как указано в связанном посте, 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.

Восстановление работает, даже если ключи находятся только на локальной машине. Я все еще не понимаю, почему он не запрашивает парольную фразу при создании инкрементального.

решение2

У меня была эта проблема при использовании sudoдля выполнения duplicity, что заставляет его искать закрытый ключ в rootдомашнем каталоге . Не находя закрытый ключ на нем, появляется ошибка "No secret key" и - по крайней мере для меня - не было сразу понятно почему.

Самым простым решением этой проблемы было избежать использования sudo, в моем случае — установить правильные разрешения для целевого каталога.

Если sudoэто необходимо, то необходимо установить соответствующие параметры GPG, чтобы он использовал связку ключей GPG пользователя: добавление --gpg-options "~user/.gnupg"к команде duplicity, какзаявил в этом ответе

Может быть, это поможет кому-то еще :-)

решение3

Используете ли вы gpg 2.1? Если да, то duplicity и gpg потребуются некоторые дополнительные параметры, если вы хотите передать парольную фразу через env var.
https://lists.launchpad.net/duplicity-team/msg02653.html

Либо просто не задавайте ПАРОЛЬНУЮ ФРАЗУ, и gpg-agent спросит вас и запомнит секрет.

Связанный контент