이중성 복원 실패: 비밀 키 없음

이중성 복원 실패: 비밀 키 없음

로컬 컴퓨터에서 원격 서버로 백업을 설정하고 있습니다.
로컬 컴퓨터에서 gpg 키를 생성하고 다음을 사용하여 테스트 백업을 실행했습니다.

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

백업은 잘 되는 것 같고, 서버에 3개의 파일이 생성됩니다.

내 문제는 복원 작업을 수행할 수 없다는 것입니다.
로컬 컴퓨터에서 테스트 파일을 삭제하고 다음을 사용하여 복원하려고 합니다.

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 환경 없이 명령을 실행하면 duplicity --encrypt-key Key D test scp://user@host/path암호를 묻지 않고 백업이 생성됩니다.

출력에는 file duplicity-full.20151011T115714Z.vol1.difftar.gpg--encrypt-key에 지정된 KeyID와 다른 KeyID가 나열됩니다. 내 열쇠 고리에 나열된 열쇠가 없습니다.

답변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개인 키를 찾지 못하면 "비밀 키 없음" 오류가 나타납니다. 적어도 저에게는 그 이유가 즉시 명확하지 않았습니다.

이 문제에 대한 가장 간단한 해결책은 sudo내 경우에는 대상 디렉터리에 올바른 권한을 설정하여 사용을 피하는 것이었습니다.

sudo필수인 경우 적절한 GPG 옵션을 설정하여 사용자의 GPG 키체인을 사용하도록 해야 합니다. 다음과 같이 duplicity 명령에 추가 합니다 --gpg-options "~user/.gnupg".이 답변에 명시된

아마도 이것은 다른 사람에게 도움이 될 것입니다 :-)

답변3

gpg 2.1을 사용하시나요? 그렇다면 env var를 통해 암호를 전달하려면 이중성과 gpg에 몇 가지 추가 매개변수가 필요합니다.
https://lists.launchpad.net/duplicity-team/msg02653.html

또는 단순히 PASSPHRASE를 설정하지 않으면 gpg-agent가 사용자에게 물어보고 비밀을 기억해 줄 것입니다.

관련 정보