4

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

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 .

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

1

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

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

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

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

1

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

В качестве альтернативы просто не устанавливайте PASSPHRASE, и gpg-agent спросит вас и запомнит для вас секрет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .