로컬 컴퓨터에서 원격 서버로 백업을 설정하고 있습니다.
로컬 컴퓨터에서 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가 사용자에게 물어보고 비밀을 기억해 줄 것입니다.