gpg가 치명적인 데이터 서명에 실패했습니다 : 커밋 객체를 쓰지 못했습니다 [Git 2.10.0]


319

나는 Git 2.10 릴리스 노트 의 예쁜 속성에 관한 기사를 거의 읽지 않았다 . git을 2.10.0으로 업그레이드하고 .gitconfig다음과 같이 전역 결과를 변경했습니다.

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = abc.def@gmail.com
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

하지만 이제는 커밋에 서명하려고합니다.

git commit -a -S -m "message"

다음과 같은 오류가 나타납니다.

비밀 키를 잠금 해제하려면 암호가 필요합니다

사용자 : "XYZ (디지털 서명)"

2048 비트 RSA 키, ID AAAAAAAA, 2016-07-01 생성

오류 : gpg가 치명적인 데이터 서명에 실패했습니다 : 커밋 객체를 쓰지 못했습니다.

참고 -계속 사용하여 변경 사항을 커밋 할 수 있습니다.git commit -a -m "message"

같은 것을 극복 할 수있는 방법이 있습니까? 또는 gpggit의 업그레이드와 함께하기 위해 구성에서 필요한 변경 사항이 있습니까?


업데이트 1

또한 GPG 키로 커밋을 "자동 서명"하는 방법이 있습니까? . 이미 키를 사용하여 구성했습니다

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

어쨌든 분명히 같은 오류가 발생합니다.


3
나는 비슷한 문제에 직면 해있다. Windows에서 Git 2.8 (git-scm)을 제거했습니다. 그리고 2.10을 설치했습니다. 이제는 gpg failed to sign the data사용할 때마다을 얻습니다 -S. 2.8에서는 문제없이 커밋에 서명 할 수 있습니다. 무슨 일인지 모르겠어요
Illuminator

5
추가하면 user.signingkey이상하게도 내 문제가 해결되었습니다.
Xavier Ho

1
@ nullpointer 나는 거기에서 내 대답을 삭제했습니다. 왜냐하면 깊은 표정을 한 후에 나는 그것이 중복임을 깨달았습니다!
Shayan Amani 1

1
아이러니하고, 나는 기계를 새로 고치도록 설정하고 내 자신의 질문을 찾았고 제안 된 솔루션 중 어느 것도 간단하게 시작할 수있을만큼 깨끗해 보이지 않습니다.
Naman

1
나를 위해 수정했다 : 자식 설정이 user.name있었다 = PGP 키를 생성 할 때 사용하는 이름은!
stacksonstacks

답변:


463

OSX 에서이 문제가 발생했습니다.

원래 답변 :

그것은 위치로 변경된 GPG 업데이트 (양조)처럼 보인다 gpg에게 gpg1당신이 진을 변경할 수 있습니다, 어디 GPG까지 자식 외모 :

git config --global gpg.program gpg1

gpg1이없는 경우 : brew install gpg1.

업데이트 된 답변 :

gpg1이 더 이상 사용되지 않는 것으로 보이거나 " 정확하게 사용되지 않습니다 " 이므로 실제로 gpg2로 업데이트해야합니다.

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

첫 번째 부분은 gpg2를 설치하고 후자는 gpg2 를 사용하는 데 필요한 핵 입니다. 문제 해결을 위해이 답변을 참조하십시오 (리눅스에 관한 것이 아니지만) 좋은 테스트를 제안합니다.

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

이 테스트가 성공하면 (오류 / 출력에 PGP 서명이 포함되지 않음) 최신 gpg 버전으로 성공적으로 업데이트 된 것입니다.

이제 자식 서명을 다시 사용할 수 있습니다!
다음이 필요하다는 점에 주목할 가치가 있습니다.

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

참고 : 서명 된 커밋을 실행 한 후 다음을 사용하여 서명 된 커밋을 확인할 수 있습니다.

git log --show-signature -1

마지막 커밋에 대한 gpg 정보가 포함됩니다.


7
gpg.program을 / usr / local / bin / gpg ( "1"아님)로 설정하면 문제가 해결되었습니다.
Iskar

5
symlinks gnupg2brew엉망으로 된 업데이트 gpg가 제거 된 것 같습니다 brew link --overwrite gnupg2.
Brice

8
흠 ... 작동하지 않습니다. xcode에 로그인 할 때 여전히 오류가 발생합니다.
Albert T. Wong

1
@ DrBeco는 원래 위치 / 동작이 아닙니까? 나는 여전히 osx에 대해 같은 문제가 있습니다 (최근에 업데이트를 완료했다고 생각합니다) gpg1. 내 보낸 실행 파일입니다.
Andy Hayden

29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry마지막으로 나를 위해 그것을 고정
댄 Bechard에게

317

gnupg2 및 gpg-agent 2.x를 사용하는 경우 환경 변수를 설정하십시오 GPG_TTY.

export GPG_TTY=$(tty)

일반적인 문제에 대한 GPG 설명서를 참조하십시오 .


17
물고기를 사용하는 경우 set -x GPG_TTY (tty)프로필을 착용 하십시오.
fasfsfgs

@StuartCardall chown 명령의 요점은 무엇입니까? 일반적으로 pseudo-tty에 로그인하거나 생성 할 때 시스템 프로세스에 의해 이미 할당되어 있습니다. 다른 사람이 소유하고 있고 루트가 아닌 경우 실패합니다. 그룹이 다른 것이라면 문제가되지 않으며 사용자는 일반적으로 그룹 tty에 속하지 않습니다.
poolie

@poolie - 그것은 당신이 경우 문제 suroot원격 서버에
스튜어트 Cardall

6
변수를 추가하고 ~/.zshrc커밋을 다시 만들 수 있습니다. 이제 터미널에 올바르게 연결되었습니다. 모든 도움을 주셔서 감사합니다!
Alex Gurrola

이것은 또한 GitHub 지침에도 있습니다 : help.github.com/articles/telling-git-about-your-gpg-key
bonh

198

모든 것이 실패하면 GIT_TRACE=1git이 실제로하고있는 것을 시도하고보십시오.

$ GIT_TRACE=1 git commit -m "Add page that always requires a logged-in user"
20:52:58.902766 git.c:328               trace: built-in: git 'commit' '-vvv' '-m' 'Add page that always requires a logged-in user'
20:52:58.918467 run-command.c:626       trace: run_command: 'gpg' '--status-fd=2' '-bsau' '23810377252EF4C2'
error: gpg failed to sign the data
fatal: failed to write commit object

이제 실패한 명령을 수동으로 실행하십시오.

$ gpg -bsau 23810377252EF4C2
gpg: skipped "23810377252EF4C2": Unusable secret key
gpg: signing failed: Unusable secret key

내 열쇠가 만료 git되어 비난받지 않았다.


34
디버깅을위한 유용한 팁. +1
VonC

4
이것은 실제로 내 자신의 문제를 해결하는 데 도움이 되었으며이 상태 메시지와 관련된 모든 유형의 문제에 대한 솔루션입니다. +1
xHocquet

디버깅 과정을 진행해 주셔서 감사합니다. 내 열쇠도 만료되었습니다.
Sgnl

2
감사! 이것은 내 문제로 이끌었다. 이상하게도 내 지역 .git/configname서명 이메일과 일치하지 않는 하나의 프로젝트 로 지정되었습니다. 그것은 그것을 거부하기에 충분했습니다.
KROSS

1
글쎄, gpg -bsau <key>내 컴퓨터에서 실행해도 아무것도 실행되지 않습니다. 실행하는 데 시간이 너무 오래 걸리나요? 아니면 키가 사용하기에 적합하다는 의미입니까? @VonC 어떤 통찰력?
Naman

82

나는 한 DONE 이를 통해 짧은 하고 쉬운 조리법 :

macOS 에서 자동 서명 커밋 (전 세계 및 다른 IDE) :

당신을 받기 signingkey이런 식으로 .

brew install gnupg gnupg2 pinentry-mac
git config --global user.signingkey <YOUR_SIGNING_KEY>
git config --global commit.gpgsign true
git config --global gpg.program gpg

다음을 gpg.conf파일에 넣으십시오 ( nano ~/.gnupg/gpg.conf명령을 사용 하여 파일 편집 ).

no-tty

다음을 gpg-agent.conf파일에 넣으십시오 ( nano ~/.gnupg/gpg-agent.conf명령을 사용 하여 파일 편집 ).

pinentry-program /usr/local/bin/pinentry-mac

업데이트 :

주석에 따라 killall gpg-agent구성 파일을 편집 한 후 명령 을 실행해야 할 수도 있습니다 gpg.conf. 자체 설명 명령에서 알 수 있듯이이 명령은 GPG (Gnu Privacy Guard) 에이전트를 종료합니다.


2
이러한 명령이 수행하는 작업을 설명 할 수 있습니까? 이해하는 데 도움이됩니다.
드로이드

7
killall gpg-agent구성 파일을 설정 한 후에도 실행 해야했습니다.
Pascal Ludwig

우리는 뒤에있는 사람들을 신뢰할 수 있다는 것을 어떻게 알 수 pinentry-mac있습니까? 나는 우리가 할 수 없다고 말하지는 않지만 GPGTools 조직은 매우 작은 팀에 의해 백업되며 repo는 gnupg.orgbrew install gnupg 의 작업을 활용하는 데 비해 기여자가 5 명 밖에 없습니다 .
sunknudsen

경우 내 문제는 내가 잘못된 지역 있다고했다, 다른 사람을 도움 user.signingkey(로컬을 확인합니다 (I 지역 설정을보고 생각하지 않았기 때문에) 내 sourcetree 구성에 통지를하지 않았다, 세트를,도 내 전역 설정 git config --local --get user.signingkey) 및 (글로벌은 git config --global --get user.signingkey이 유효하지 않은 경우) 로컬 하나의 해제, 더 나은 동일, 또는이다 ( git config --local --unset user.signingkey)
글렌 'devalias 명'

OSX (10.13.06)에서 다음 오류가 발생합니다 .bash : pinentry-program : command not found
cgl

59

gpg-agent오래된 데이터로 인해 프로세스 가 중단 될 수 있습니다. 그래서 새로운 gpg-agent시작은 암호를 요구할 것입니다.


2
이것은 나를 위해 그것을했다.
danyim

12
gpg-agent --daemon시작하는 데 사용
FooBar

1
나뿐만 아니라 다시 시작 GPG 에이전트로했다
GnrlBzik

8
macOS에서 프로세스를 종료하려면 :killall gpg-agent
incleaf

1
우분투에서gpgconf --kill gpg-agent
아담

37

아래 URL을 따라 서명 된 커밋 https://help.github.com/en/articles/telling-git-about-your-signing-key 를 설정 하십시오.

여전히 gpg가 데이터에 서명하지 못한 경우 치명적 : 커밋 객체를 쓰지 못했습니다.

이것은 git 문제가 아니며 GPG와 관련이 있습니다. 아래 단계를 따르십시오.

1.gpg --version

  1. echo "test" | gpg --clearsign

표시되는 경우 :

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
  1. 그런 다음 사용 export GPG_TTY=$(tty)

4. echo "test" | gpg --clearsign PGP 서명이 어떤 것인지 다시 시도하십시오 .

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

6. 적용 git commit -S -m "commitMsz"


1
이것은 나를위한 해결책이었습니다! 고마워요!
upInCloud

이것이 문제인지 알아내는 방법에 대한 훌륭한 연습.
Philippe Signoret

이것이 나를 위해 한 일입니다. 고마워요!
Allan Guwatudde '12

export GPG_TTY=$(tty)트릭이었습니다. 내 .zshrc파일에 추가
Shane Stillwell

21

MacOS 컴퓨터 에서이 문제에 직면 한 사람은 다음을 시도하십시오.

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (필요한 경우)
  4. gpg --full-generate-key 알고리즘을 사용하여 키를 작성하십시오.
  5. 다음을 실행하여 생성 된 키를 가져옵니다. gpg --list-keys
  6. 여기에 키를 설정하십시오 git config --global user.signingkey <Key from your list>
  7. git config --global gpg.program /usr/local/bin/gpg
  8. git config --global commit.gpgsign true
  9. : 당신이 다음 GitHub의로 키를 내보내려면 gpg --armor --export <key> 및 GPG 키에서 GitHub의에이 키를 추가 https://github.com/settings/keys (시작과 끝 라인을 포함하여)

문제가 여전히 존재하는 경우 :

test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile

echo 'export GPG_TTY=$(tty)' >> ~/.profile

문제가 여전히 존재하는 경우 :

https://gpgtools.org를 설치 하고 메뉴 표시 줄에서 Sign 을 눌러 사용한 키에 서명하십시오 . Key- > Sign

문제가 여전히 존재하는 경우 :

글로벌 :로 이동 .gitconfig내 경우에 어떤 파일을 /Users/gent/.gitconfig 그리고 수정 .gitconfig의 파일을 (확인 이메일을 입력하고 이름은 키를 생성하는 동안 사용자가 만든 것을 하나 동일) :

[user]
	email = gent@youremail.com
	name = Gent
	signingkey = <YOURKEY>
[gpg]
	program = /usr/local/bin/gpg
[commit]
	gpsign = true
	gpgsign = true
[filter "lfs"]
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
[credential]
	helper = osxkeychain


2
.gitconfig에 'gpsign = true'를 추가하면 해결되었습니다.
Pierre

18

여기 내 센트 :

gpg-agent에 키를 생성하고 추가 할 때 passphrase . 이제 passphrase어느 시점에서 만료되고 gpg다시 서명을 시작할 수 있도록 키를 잠금 해제하려면 다시 입력해야합니다.

당신은 다른 프로그램을 사용하는 경우와 인터페이스 gpg, gpg'프롬프트들 당신에 당신의 암호가하는 입력 하지 (기본적으로 나타날 gpg-agent가능성이 당신의 입력 대화 상자를 표시 할 수 없습니다 daemonized 때를 stdin).

해결책 중 하나는 gpg --sign a_file.txt 키를 만들 때 입력 한 암호를 입력 한 다음 모든 것이 잘 gpg-agent되어야 합니다 ( 자동 서명해야 함)

보다 비밀번호 문구에 대해 더 긴 시간 초과를 설정하는 방법에 이 답변 을 .

또는 비밀번호 문구를 완전히 제거 할 수 있습니다. ssh-keygen -p

편집 : man gpg-agent위의 작업을 자동으로 수행하고 행을 추가하는 방법에 대한 내용을 읽으려면 a 를 수행하십시오.

GPG_TTY=$(tty)
export GPG_TTY

bash를 사용하는 경우 .bashrc에


@ george-daramouskas에게 감사드립니다. 이것은 내 문제였습니다.
Nic Barker

10

2016 년 10 월 업데이트 : 문제 871 에서 "Git 2.9.3에서 서명이 중지되었습니다"라고 언급했습니다.

이틀 전에 릴리스 된 Windows 2.10.1 용 Git (2016 년 10 월 4 일)은 커밋 및 태그의 대화 형 GPG 서명을 수정했습니다.

git의 최근 gpg-sign 변경 (Linux에서는 아무런 문제가 없음)은 Windows에서 비 MSYS2-git이 MSYS2-gpg와 상호 작용하는 방식에 문제를 노출시킵니다.


원래 답변 :

" 7.4 Git Tools-Signing Your Work "를 읽으면 " user.signingkey"설정 이 있다고 가정합니다 .

gpg 주변의 마지막 큰 리팩토링 (Git 2.10 이전)이 commit 2f47eae2a에 있었고 , 여기에서 오류 메시지가gpg-interface.c

해당 파일에 로그온하면 커밋 af2b21e 의 최근 변경 사항이 표시됩니다 (Git 2.10).

gpg2는 기본적으로 이미 긴 형식을 사용하지만 대부분의 배포판에서는 호환성 이유로 인해 여전히 "gpg"가 이전 1.x 버전 인 것으로 보입니다. 그리고 이전 버전의 gpg는 32 비트 짧은 ID 만 표시하므로 매우 안전하지 않습니다.

이것은 실제로 검증 자체 에는 중요하지 않습니다 . 검증이 통과하면 pgp 서명이 좋습니다.
그러나 실제로 키가없고 가져 오기를 원하거나 검증에 사용 된 키를 정확하게 확인하고 확인하려면 키를 더 정확하게 지정해야합니다.

따라서 user.signingkey구성 을 지정한 방법 과 사용중인 gpg 버전 (gpg1 또는 gpg2)을 확인하여 오류 메시지에 영향을 미치는지 확인하십시오.

오류 메시지 의 조건을 변경하는 커밋 0581b54 도 있습니다 gpg failed to sign the data( 0d2b664 커밋 을 보완 함). ) :

우리는 현재 stderr에서 읽지 않습니다. 그러나 우리는 향후 패치를 원할 것입니다. 따라서 이것은 또한 우리를 준비시킵니다 (이 경우 gpg 모든 입력을 읽기 전에 쓰지 만 다시 키 uid가 파이프 버퍼를 채울 가능성은 없습니다).

커밋 4322353 은 gpg가 이제 임시 파일을 사용하고 있음을 보여 주므로 그 주변에 올바른 문제가있을 수 있습니다.

우리를 위해 어려운 경우를 처리하는 tempfile 객체를 사용하여 변환하고 누락 된 정리 호출을 추가합시다.


나는 나의합니까 user.signingkey설정 세트를. 또한 사용 gpg (GnuPG) 2.0.3합니다.
Naman

@ nullpointer 내 답변을 편집했습니다. Gti For Windows 2.10.1에서 문제가 지속되는지 확인할 수 있습니다.
VonC

Windows가 아닌 MacOSX에서 작업하는 최신 업데이트에 대해 죄송합니다.이를 확인할 수 없습니다.
Naman

10

자식 추적은 내 상황에서 매우 드러났습니다.

   GIT_TRACE=1 git commit -m "a commit message"
   13:45:39.940081 git.c:344               trace: built-in: git commit -m 'a commit message'
   13:45:39.977999 run-command.c:640       trace: run_command: gpg --status-fd=2 -bsau 'full name <your-email@domain.com>'
   error: gpg failed to sign the data
   fatal: failed to write commit object

git확인 중인 형식별로 초기 키를 생성해야했습니다 . 전달 된 값을 복사하는 것이 가장 좋습니다-bsau위에 을 그대로 로그 아래에서 사용하는 것이 .

그래서 그것은

   gpg --quick-generate-key "full name <your-email@domain.com>"

그런 다음 효과가있었습니다.

희망이 도움이됩니다.


이것은 나를 위해 일했고 git trace정말 도움이되었습니다.
philip oghenerobo balogun

1
친구 ... 당신은 내가 당신의 답변에 도달 할 때까지 이것을 분류하려고 얼마나 많은 시간을 이미지 할 수 없습니다 ... 그것은 키의 이름을 따랐습니다 .. 감사합니다! 감사합니다! 감사합니다!
giomanda

8

cygwin을 사용하여 최근에로 전환했습니다 gpg2. 그런 다음 설정 후 git으로 서명하는 것과 동일한 문제가있었습니다 git config gpg.program gpg2.

시도 echo "test" | gpg2 --clearsigngpg2가 작동하는지 확인합니다. 그것이 git config gpg.program gpg작동하기 때문에 방금 설정하는 가장 쉬운 해결책을 찾았습니다 . 그러나 이런 식으로 더 나은 오류가 발생합니다. 예를 들어 pinentry를 설치해야합니다.


실제로 일부 Linux 배포판에서는 동일한 문제가 발생할 수 있습니다. Git은 항상 gpg2가 아닌 gpg를 사용합니다. 참조 : stackoverflow.com/questions/34766123/...
rugk

이것은 나에게 gpg: signing failed: Inappropriate ioctl for device해결할 수있는 오류 를 보여주었습니다 export GPG_TTY=$(tty). 출처 : github.com/keybase/keybase-issues/issues/2798
swiknaba

8

OS X에서는 gnupg2brew 를 통해 gpg 에이전트죽여야했습니다 . 때로 발생합니다.

pkill -9 gpg-agent

env필요한 경우 변수를 설정하십시오 .

export GPG_TTY=$(tty)

일반적인 GPG 문제이 답변도 여기를 참조하십시오 .


2
이것은 나를 위해 일했다. 새 별칭을 만들었습니다 alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.
oalders

1
고마워요. 나중에 env 변수를 설정할 필요조차 없었습니다.
Nick Rameau

7

나는 비슷한 대답을 보았지만 나를 위해 일한 것과 똑같은 것은 없습니다. Linux에서는 다음을 사용하여 죽이고 다시 시작 gpg-agent해야했습니다.

$ pkill gpg-agent
$ gpg-agent --daemon
$ git commit ...

이것은 나를 위해 속임수를했다. user.signingkey다른 의견의 말과 개인 키로 설정 해야하는 것처럼 보입니다 .

$ git config --global user.signingkey [your_key_hash]


6

Ubuntu 18.04에서이 오류가 발생하여 키가 만료 된 것으로 나타났습니다 .

이것을보기 위해 이것을 실행했고 내 키가 만료되었음을 확인했습니다.

gpg --list-keys

이 문제를 해결하기 위해 이전 명령에 표시된 ID를 사용하여 실행했습니다.

gpg --edit-key <ID>

거기서부터 나는 이 지시 사항 의 만료 key 0지시key 1따라 확장 한 다음 프롬프트를 따르게되었습니다. 그런 다음 반복key 0expirekey 1 .

그 후 이것을 테스트하기 위해 다음을 실행했습니다.

echo test | gpg --clearsign

그리고 수정하기 전에 오류와 함께 실패했습니다.

gpg : 기본 비밀 키 없음 : 비밀 키 없음
gpg : [stdin] : 명확한 서명 실패 : 비밀 키 없음

그러나 수정 후 동일한 명령이 메시지에 성공적으로 서명하여 일이 다시 작동한다는 것을 알았습니다!


Mac OSX Catalina에서 CentOS7로 유효한 키를 가져올 때이 문제를 해결했습니다. 이 짐승과 2 시간 이상 싸워서 왜 다른 것들 중에서 암호를 요구했는지 알아 내려고 노력했습니다. 이상하게도 이미 만료되지 않도록 설정되었으며 여전히 만료되지 않도록 설정했습니다.
코디 B

5

나는 같은 문제에 부딪쳤다. 문제가 git 2.10.0아니라gnupg 1.4.21 .

gnupg를 1.4.20으로 일시적으로 다운 그레이드하면 문제가 해결되었습니다.

homebrew를 사용하고 있고 패키지를 업그레이드 한 경우 brew switch gnupg 1.4.20되돌릴 수 있습니다 .


3

이메일이 올바르게 설정되어 있는지 확인하십시오.

git config --global user.email "user@example.com"

1
이것은 나를 위해 일한 유일한 솔루션이며 github
Naz

1
필자의 경우 문제는 특정 리포지토리에서 회사 전자 메일을 사용하고 있는데 PGP 키가 생성되지 않았다는 것입니다.
rubick

3

GPG 키의 UID에 연결된 이메일이 git에서 사용중인 이메일과 다른 경우 키에 다른 사용자 ID를 추가하거나 이메일과 정확히 일치하는 키를 사용해야합니다.

다음을 사용하여 다른 UID를 추가 할 수 있습니다.

$ gpg-편집 키

mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails 참조


1
이것은 나를위한 것이었다. 그리스도, 어떻게 "데이터 서명에 실패했습니다"보다 더 유익한 오류 메시지가 없습니까?
Alec

3

gpg가 작동하는지 테스트하려고 시도한 후 이것을 얻었으므로 실수로 gpg를 업데이트해야합니다.

gpg: WARNING: server 'gpg-agent' is older than us (2.1.21 < 2.2.10)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.

달리는 gpgconf --kill all것이 나를 위해 고쳤습니다.

이것이 누군가를 돕기를 바랍니다.


2

모든 종속 항목 (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring 등)의 최신 소스와 함께 빌드 된 최신 Git 소스 (2.12.2)와 비슷한 문제가있었습니다.

그것은 밝혀 libreadlineGnuPG는 문제를주고 있었다 :

$ gpg --version
gpg: symbol lookup error: /usr/local/lib/libreadline.so.7: undefined symbol: UP

물론 Git에서 유용한 정보를 얻는 데 -vvv실패했지만 실패는 미스터리였습니다.

ReadLine으로 인한 PGP 오류를 해결하려면 패키지 관리자를 업데이트하거나 사용할 수 없음-gpg 오류 의 지침을 따르십시오 .

터미널에서 :

ls /usr/local/lib

거기에 많은 readline libs (libreadline.so.BLAH-BLAH)가 있었으므로 i :

su
mkdir temp
mv /usr/local/lib/libreadline* temp
ldconfig

2

위의 답변은 훌륭하지만 저에게는 효과가 없었습니다. 내 문제를 해결 한 것은 공개 키 와 비밀 키를 모두 내보내는 것이 었습니다 .

우리가 내보내는 기계의 키를 나열하십시오.

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
--------------------------------
pub 1024D/ABCDFE01 2008-04-13
uid firstname lastname (description) <email@example.com>
sub 2048g/DEFABC01 2008-04-13

키를 내 보내다

$ gpg --output mygpgkey_pub.gpg --armor --export ABCDFE01
$ gpg --output mygpgkey_sec.gpg --armor --export-secret-key ABCDFE01

우리가 수입하는 기계로 가서 수입하십시오

$ gpg --import ~/mygpgkey_pub.gpg
$ gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg

빙고 봉고, 다 끝났어!

참고: https://www.debuntu.org/how-to-importexport-gpg-key-pair/

추신. 내 키는 원래 bootcamp windows 7에서 만들어졌으며 Mac air (실제로 다른 물리적 컴퓨터와 동일)로 내보냈습니다.


2

나는 Ubuntu 18.04에 있고 같은 오류가 발생하여 몇 주 동안 걱정했습니다. 마지막으로 gpg2가 아무것도 가리키고 있지 않다는 것을 깨달았습니다. 따라서 간단히 실행

git config --global gpg.program gpg

그리고 tada는 매력처럼 작동합니다.

서명 된 커밋

커밋이 태그를 확인했습니다.


2

구성 문제가 아니라 키가 만료되어이 오류가 발생했습니다. OSX에서 유효성을 확장하는 가장 쉬운 방법은 GPG 키 체인 앱을 여는 것입니다 (설치 한 경우).이를 확장하라는 메시지가 자동으로 표시됩니다. 두 번의 클릭으로 완료됩니다. 잘하면 이것은 동료 Google 직원에게 도움이됩니다 :)


2

이것은 우분투에서 나에게 갑자기 일어나기 시작했다. 최근 업데이트가 그랬는지 확실하지 않지만 기존의 어떤 문제도 나에게 적용되지 않았다 GPG_TTY. gpg이 오류로 독립형 명령이 실패했습니다.

$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

test
gpg: signing failed: Operation cancelled
gpg: [stdin]: clear-sign failed: Operation cancelled

나는 옵션으로 실행 gpg을 시도 --debug-all하고 아래 출력을 보았습니다 .

gpg: DBG: chan_3 <- INQUIRE PINENTRY_LAUNCHED 27472 gnome3 1.1.0 /dev/pts/6 screen-256color -
gpg: DBG: chan_3 -> END
gpg: DBG: chan_3 <- ERR 83886179 Operation cancelled <Pinentry>
gpg: signing failed: Operation cancelled

위의 문제는 pinentry 프로그램에 . Gpg는 일반적으로 pinentry-curses나를 위해 실행 되므로 pinentry-tty( aptitude install먼저 변경해야 함 ) 오류가 사라졌습니다 (더 이상 전체 화면 암호 입력을 얻지 못하지만 어쨌든 마음에 들지 않습니다). 이 변경하려면, 나는 줄을 추가했다 pinentry-program /usr/bin/pinentry-tty~/.gnupg/gpg-agent.conf와 함께 에이전트를 죽이고 gpgconf --kill gpg-agent(가 다음 번에 다시 시작됩니다).


1

위의 답변 중 어느 것도 내 문제와 일치하지 않는 것 같습니다. 내 gpg바이너리 ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2)가 GPG Suite의 일부로 설치되었습니다. BREW가 아닌 .

그럼에도 불구하고 나는 그 조언이 다음과 같이 요약되었다고 생각했다 gpg. 그래서 나는 시도했다 :

brew update
brew upgrade git
brew install gpg

# the following are suggestions from brew's Caveats, to make `/usr/local/bin/gpg`
# point to the brew binary:
rm '/usr/local/bin/gpg'
brew link --overwrite gnupg2

내가 제대로 변경했다고 확인 gpg제에 $PATH양조에서 새 실행 파일에 지점 :

🍔 which gpg
/usr/local/bin/gpg
🍔 ls -l /usr/local/bin/gpg
lrwxr-xr-x  1 burger  admin  33 Feb 13 13:22 /usr/local/bin/gpg -> ../Cellar/gnupg2/2.0.30_3/bin/gpg

그리고 나는 git에게 어떤 gpg바이너리를 사용 해야하는지 명시 적으로 말했다 .

git config --global gpg.program gpg

글쎄, 그것은 경로에 민감하기 때문에 완전히 수밀이 아닐 수도 있습니다. 나는 실제로 git이 brew를 호출하는 것으로 바꿨다는 것을 의심 할 여지없이 확인하지 않았다 gpg.

어쨌든 :이 중 어느 것도 git commit커밋에 다시 서명 하기에 충분하지 않았습니다 .


나를 위해 일한 것은 궁극적으로 GPG Suite업데이트하는 것이 었습니다 . 2016.7 버전을 실행 중이며 2016.10으로 업데이트하면 문제가 해결 된 것으로 나타났습니다.

을 열고 GPG Keychain.app"업데이트 확인…"을 누르십시오. 새 버전 : 서명 된 커밋이 다시 올바르게 작동했습니다.


최신 버전으로 업데이트하려고했는데 ... 작동하지 않습니다. xcode에 로그인하려고합니다.
Albert T. Wong


1

@birchlabs와 매우 유사하게, 많은 파기 / 검색 후 GPG가 아니라 GPG Suite라는 것을 알았습니다. 나는 그것을 cask reinstall gpg-suite했고 그것을 해결했다.


0

이 경우가 무작위로 발생하고 과거와 같이 완벽하게 작동 한 경우 내 경우와 같이 로그 아웃 ( cmd+shift+q)하고 다시 로그인하십시오.


0

필자의 경우 다른 답변에서 언급 한 해결책 중 아무것도 작동하지 않았습니다. 문제가 하나의 저장소에만 해당한다는 것을 알았습니다. 저장소를 삭제하고 복제하면 문제가 해결되었습니다.


0

이상한 것이지만 터미널이 충분히 큰지 확인하십시오! 실행하여 너무 작은 echo test | gpg --clearsign지 알 수 있습니다. 알려주는 오류 메시지가 나타납니다. 충분히 크지 않으면 GPG 에이전트가 작은 ncurses 상자를 표시 할 수 없습니다.

GUI 에이전트 또는 ncurses를 사용하지 않는 것을 사용하는 경우에는 적용되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.