Falha na restauração de duplicidade: nenhuma chave secreta

4

Estou configurando um backup de uma máquina local para um servidor remoto.
Eu criei chaves gpg na máquina local e executei um backup de teste com:

PASSPHRASE="MyGPGPassphrase" duplicity --encrypt-key KeyID test scp://user@server/path

O backup parece funcionar bem, três arquivos são criados no servidor.

Meu problema é que não consigo fazer a restauração funcionar.
Eu apaguei o arquivo de teste na máquina local e tente restaurá-lo com:

PASSPHRASE="MyGPGPassphrase" duplicity --encrypt-key KeyID scp://user@server/path test

Eu recebo o seguinte erro:

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 =====

Eu exportei as chaves gpg na máquina local com: gpg --export-secret-key KeyID > secret.key e gpg --armor --export KeyID > public.key

E importou-os no servidor com: gpg --import secret.key e gpg --import public.key

Há mais alguma coisa que precisa ser feita para que a restauração funcione?

Editar:
Se eu executar o comando sem o PASSPHRASE env duplicity --encrypt-key Key D test scp://user@host/path , o backup será criado de qualquer maneira sem solicitar a frase secreta.

A saída de file duplicity-full.20151011T115714Z.vol1.difftar.gpg lista um KeyID diferente daquele especificado em --encrypt-key. Eu não tenho a chave listada no meu chaveiro.

    
por Pabi 11.10.2015 / 04:00

3 respostas

3

O problema é que, como o link ede postado, o gpg 2.1 retira a senha do pipe para a chave auth.
Os agentes gpg precisam ser ativados e configurados para que a restauração funcione.

Adicione o seguinte a ~/.gnupg/gpg.conf :

use-agent
pinentry-mode loopback

E para o seu ~/gnupg/gpg-agent.conf :

pinentry-program /usr/bin/pinentry-gtk-2
allow-loopback-pinentry

Em seguida, reinicie o agente com echo RELOADAGENT | gpg-connect-agent .

O trabalho de restauração, mesmo se as chaves estiverem apenas na máquina local. Eu ainda não entendi porque ele não pede a frase secreta ao fazer incremental embora.

    
por 11.10.2015 / 16:11
1

Você está usando o gpg 2.1? se sim, duplicidade e gpg precisam de alguns parâmetros extras se você quiser entregar a frase-senha via env var. link

Se preferir, simplesmente não defina PASS FRASE e o gpg-agent perguntará a você e memorizará o segredo para você.

    
por 11.10.2015 / 13:13
1

Eu tive esse problema ao usar sudo para executar duplicity , o que faz com que ele pesquise a chave privada no diretório inicial de root . Não encontrando a chave privada, o erro "Nenhuma chave secreta" aparece e - pelo menos para mim - não ficou imediatamente claro o motivo.

A solução mais simples para esse problema foi evitar o uso de sudo , no meu caso, definindo as permissões corretas no diretório de destino.

Se sudo for uma obrigação, as opções de GPG apropriadas precisam ser definidas para que ele use as chaves GPG do usuário: adicionando --gpg-options "~user/.gnupg" ao comando de duplicidade, como declarado nesta resposta

Talvez isso ajude alguém: -)

    
por 18.07.2017 / 20:52