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