itsource

Git 오류 - gpg가 데이터에 서명하지 못했습니다.

mycopycode 2023. 6. 16. 21:43
반응형

Git 오류 - gpg가 데이터에 서명하지 못했습니다.

나는 git를 사용하기 시작했고 홈브루를 통해 git과 gpg를 설치합니다.어떤 이유에서인지, 내가 할 때 이 오류가 발생합니다.git commit저는 이 주제와 관련된 다른 스택 오버플로 질문들을 너무 많이 보았지만 어느 것도 효과가 없었습니다.이 오류를 해결하려면 어떻게 해야 성공적으로 업로드할 수 있습니까?

error: gpg failed to sign the data
fatal: failed to write commit object

문제 해결을 위해 먼저 시도해야 할 두 가지 사항:

  • 려달을 gpg --version 2이 아님)가 설치되어 있는지 합니다.
  • 려달을 echo "test" | gpg --clearsign 하기 gpg그 자체가 작동하고 있습니다.

문제가 없으면 다음으로 시도해야 할 것이 하나 있습니다.

  • 려달을 brew install pinentry되어 있는지 합니다.

에 다시 git commit그고여전히리▁""히전"를 .failed to sign the data 예, 예:

  • 려달을 gpgconf --kill gpg-agent도 있습니다.

그렇지 않으면 GnuPG 환경이 작동하는지 확인하기 위해 실행해야 하는 몇 가지 기본 단계:

  • 려달을 gpg -K --keyid-format SHORT되지 않은 키 있는지 은 과 같습니다.

그 결과 GnuPG에 사용할 비밀 키가 없는 것으로 나타나면 다음과 같이 만들어야 합니다.

  • 려달을 gpg --gen-key가 키 을 PG가 키 쌍을 만드는 단계를 안내합니다.

"Inpropective ioctl for device"라는 오류 메시지가 표시되면 다음을 수행합니다.

  • 려달을 export GPG_TTY=$(tty)그리고/또는 그것을 당신의 것에 추가합니다.~/.bashrc또는˜/.bash_profile

Git는 어떤 키로 서명하는지 알아야 합니다.

GPG, gpg-agent 및 gpg.conf 파일( 가이드 참조)을 설정한 후에는

git config --global user.signingKey EB11C755

분명히, 마지막에 있는 공용 키를 사용자의 것으로 바꿉니다.기본적으로 모든 커밋에 서명하려면

git config --global commit.gpgsign true

$ gpg2 -K --keyid-format SHORT          # <-- Shows your keys, e.g.:
/home/<username>/.gnupg/pubring.kbx
-------------------------------
sec   rsa4096/0754B01E 2019-02-02 [SCA]             <--secret key
      C396BF3771782D7691B0641145E11B080754B01E
uid         [ultimate] John Doe <user@domain.com>
ssb   rsa4096/A20AB8EC 2019-02-02 [E]               <--public key

sec   rsa4096/25C504D5 2019-02-02 [SCA] [revoked: 2020-06-01]
      08BFF49B9E07E4B4B0C4946B645B6C1425C504D5
uid         [ revoked] John Doe <user2@domain.com>
uid         [ revoked] [jpeg image of size 2670]

에▁where디A20AB8EC이 예에서 찾으려는 키 ID입니다.

사용하고 있습니다.zsh를 지원하며 Linux용 Windows Subsystem에서 작동합니다.

export GPG_TTY=$(tty)

다른 사용자는 MacOS(예: Catalina 10.15.7)에 필요한 변경 사항이 위뿐임을 확인했습니다.Mac의 경우 위를 ~/.zshrc에 추가합니다.

WSL2를 사용하는 Windows의 Linux 컨테이너에서도 작동하는 것으로 입증되었습니다.

어떻게든 당신의 GIT는 모든 커밋에 GPG 서명하도록 구성되어 있습니다.git를 사용하여 커밋하거나 푸시하기 위해 GPG와 서명할 필요가 없습니다.당신의 gpg 서명 메커니즘이 아직 구성되지 않았기 때문에 오류가 발생할 수 있습니다.

git를 처음 사용하는 경우 처음에는 GPG 서명 없이 먼저 작동하도록 하고 나중에 정말 필요하면 로그인을 추가합니다.

다음을 수행하여 gpg와 관련하여 git가 구성된 방식을 확인할 수 있습니다.

git config -l | grep gpg

이는 다음을 포함하여 0개 이상의 라인을 생성할 수 있습니다.

commit.gpgsign=true

"commit.gpgsign"이 참이면 gpg 서명을 사용할 수 있습니다.사용 안 함:

git config --global --unset commit.gpgsign

그런 다음 커밋을 다시 실행합니다.이제 gpg 서명 없이 실행되어야 합니다.기본 git이 작동한 후에는 gpg 서명을 다시 믹스에 추가해야 합니다.

@sideshowbarker 및 @XavierHo 솔루션을 참조하여 다음 단계를 통해 문제를 해결했습니다.

brew에 의해 gpg2가 설치되었다고 가정합니다.

git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key

gpg2 -K --keyid-format SHORT 

           

.../.gnupg/sysring.gpg

secsa2048/0A61C6FC 2017-06-29 [SC] [만료: 2019-06-29]

git config --global user.signingkey 0A61C6FC

동료가 상기시켜 주니 추가해야 합니다.

export GPG_TTY=$(tty)

zsh를 사용하는 경우 ~/.zshrc로, 그렇지 않은 경우 ~/.zsh_profile에 추가합니다.


macOS의 경우,

gpg2는 brew에서 gpg와 결합되므로 gpg 명령은 gpg2를 가리킵니다.

brew install gpg2

brew info gpg

gnupg: 안정적인 2.2.6 (표준)

git config --global gpg.program gpg
gpg -K --keyid-format SHORT 

그리고 암호 입력을 위한 핀엔트리-맥이 있습니다.

brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf

라인추가

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

동료가 상기시켜 주니 추가해야 합니다.

export GPG_TTY=$(tty)

zsh를 사용하는 경우 ~/.zshrc로, 그렇지 않은 경우 ~/.zsh_profile에 추가합니다.

키가 만료되었는지 확인합니다. 날짜 새 가 없음)를하면,git정상적으로 작동합니다.

만료된 키를 수정하는 한 가지 방법:

(주:)$명령줄 프롬프트를 나타냅니다. 프롬프트 뒤에 명령을 입력합니다. 각 명령 뒤에 Enter 키를 누릅니다.)

$ gpg2 --list-keys키 ID(키 ID(아이디) 뒤에 문자) \pubslink)

$ gpg2 --edit-key <key id>가 이게 하면 gpg 이열프리고로 쉘이 .gpg>

gpg> expire 기본 의 새 합니다.

(subkey)가 , (subkey)sub합니다.

gpg> key 1 번째 키 " " 를 합니다.
gpg> expire 하위 의 새 합니다.

필요에 따라 각 후속 하위 키에 대해 반복합니다.

솔루션:

Issue: Disabled loopback pinentry mode

이 문제를 해결하려면 ~/.gnupg/gpg.conf에서 루프백 핀 입력 모드를 사용하도록 설정해야 합니다.

cat <<'EOF' >> ~/.gnupg/gpg.conf

use-agent 
pinentry-mode loopback

EOF

또한 ~/.gnupg/gpg-agent.conf(파일이 아직 없는 경우 파일 생성)에도 다음이 포함됩니다.

cat <<'EOF' >> ~/.gnupg/gpg-agent.conf

allow-loopback-pinentry

EOF

그런 다음 에이전트를 다시 시작합니다.echo RELOADAGENT | gpg-connect-agent그리고 당신은 가도 좋습니다!

원천

저는 gpg.프로그램을 gpg의 절대 경로로 수정해야 했습니다.

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

Windows를 Cygwin과 함께 사용하고 있습니다.

Ubuntu 18.04에서 작동했습니다.

gpg 키를 확인합니다.

gpg -K --keyid-format LONG

빈 응답을 받으면 GPG 키를 생성합니다.

gpg --generate-key

첫 번째 명령을 다시 실행하면 다음과 같이 출력됩니다.

sec   rsa3072/95A854E0593B3214 2019-05-06 [SC] [expires: 2021-05-05]
      AF2F7514568DC26B0EB97B9595A854E0593B74D8
uid                 [ultimate] yourname<your_email>
ssb   rsa3072/EFD326E6C611117C 2019-05-06 [E] [expires: 2021-05-05]

git 서명 키 설정

git config --global user.signingkey 95A854E0593B3214

--global선택 사항)

또는 SSH 키로 서명해도 괜찮으시다면

git config commit.gpgsign false

여기와 여기에서 이 질문에 따른 보안 문제로 인해 권장되지 않습니다.

이전에 핀 입력과 gpg를 설정했는데 갑자기 작동하지 않는 경우:

gpg가 작동하는지 확인합니다.

echo "test" | gpg --clearsign

라고 되어 있다면,gpg: signing failed: No pinentry가끔 걸리는 gpg 데몬 클라이언트를 다시 시작하면 됩니다.

gpgconf --kill gpg-agent

이제 작동해야 합니다.

echo "test" | gpg --clearsign

이전에는 작동했지만 실패했다고 표시된 경우 에이전트를 종료하고 다시 시도합니다.

gpgconf --kill gpg-agent

에이전트가 다시 작동하는지 확인합니다.

echo "test" | gpg --clearsign

2gnupg 2.x로 한 후 이 문제가 했습니다. 다른 를 참조하고 을 알 수 . gpg2는 키를 참조합니다.나는 여전히 가지고 있었습니다.signingkey = ABC98F11 설정) my (gpg v1 설정) »~/.gitconfig의 키 는 longergpg2 파일의 키 입니다..gpg --list-secret-keys

GIT_TRACE=1을 사용하여 Git에서 실패한 위치를 확인한 후 Git에서 사용하는 모든 사용자 지정 구성과 정의된 위치를 확인한 후 필요에 따라 재정의합니다.

GIT_TRACE=1 git commit -S -m "this will tell you wich intern git command failed"

git config --list --show-scope --show-origin

나를 위해 나는 그것을 가지고 있었습니다.error: gpg failed to sign the data그리고.fatal: failed to write commit objectGit는 어떤 이유로 기본적으로 Smimsign을 사용하고 있었기 때문에, 내가 설정을 해제하더라도.gpg.x509.program, 그리고 Smimsign은 내 키를 찾을 수 없었습니다.

그래서 나는 Git에게 대신 gpg를 사용하라고 명시적으로 말해야 했습니다.

git config --local gpg.x509.program gpg

이 오류는 GPG 키가 만료된 경우에도 발생할 수 있습니다.새 키를 생성하여 Git에 추가하면 이 문제가 해결됩니다.

나에게 이 오류는 다음과 같이 발생하기 시작했습니다.git tag -s GNU GNU/리눅스로 전환했을 때pinentry-gnome3pinentry-curses((으)로 사용update-alternatives --config pinentry를 사용하여 쉽게 액세스할 수 를 사용하여 원격 액세스를 원격으로 액세스할 수 있습니다.에서만 발생했습니다.git tag -s는다가 아닌gpg (예:)gpg --clearsign) 그 자체입니다.

다시 한 유일한 은 이경다작기위해필유요변일같다다사습니음과항은을 추가하는 이었습니다.export GPG_TTY=$(tty)내 셸 시작 파일로.

이 질문에 대한 다른 답변에서 이 수정에 대한 표시기로 언급된 "Incropyate ioctl for device" 오류 메시지를 받지 못했습니다.

참고: 이 오류가 발생한 원인은 제안한 오류와 완전히 다른 오류였기 때문입니다.export GPG_TTY=$(tty)이 질문에 대한 다른 대답에서 (일반적으로 부수적인 힌트로), 저는 이 질문에 다음을 언급하는 다른 대답이 필요하다고 결정했습니다.export GPG_TTY=$(tty)경우에 따라 주요 해결책이자 유일한 것일 수 있습니다.

이 는 저의경우, 실중이오발다니생습했류가에를 실행할 때 했습니다.git commit에.tmux암호 프롬프트를 맞출 수 없는 창입니다.

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

test
gpg: signing failed: Screen or window too small
gpg: [stdin]: clear-sign failed: Screen or window too small

는 내가만것은든을 .git 의 개 별 가 있 키 는 키개:키▁3▁with에 대한 키:certify/sign/encrypt키가 앞으로 만료된 것으로 표시됩니다(며칠간 정상 작동한 후).

pub   rsa4096/4CD1E9DA 2017-04-26 [C] [expired: 2017-04-28]
      Key fingerprint = 4670 59C1 7592 08B8 7FA5  313B 2A42 B6A6 4CD1 E9DA
uid         [ expired] Stuart Cardall (GIT Development Keys) <xxxxxx>
sub   rsa4096/5195E715 2017-04-26 [E] [expired: 2019-04-26]
sub   rsa4096/DB74C297 2017-04-26 [S] [expired: 2019-04-26]
sub   rsa2048/A3913A3C 2017-04-28 [] [expired: never     ]

문제를 해결하기 위해 별도의 하위 키를 추가하지 않고 새 키를 만들었습니다.

그것을 해결한 것은 키의 이름이 내 git 사용자 이름과 일치하는지 확인하는 것이었습니다.이메일도 일치해야 할 것 같습니다.이것은 Mac에서 GPG KeyChain을 사용하는 것과 관련이 있을 수 있습니다.확실하진 않다.

제가 이걸 작성할 때 키 이름을 짓는 줄 알았는데, 제 이름(git 사용자 이름)을 묻는 것이었나 봐요.

GPG Keychain form

mlacs에서했습니다. mlacs를 사용하여 하기 위해 . 문제를 해결하기 위해 키를 나열하여 만료되었는지 확인하려고 했습니다.gpg2 --list-keys했습니다.git config --global user.signingkey.

이러한 명령을 실행한 후 서명된 커밋을 문제 없이 다시 실행할 수 있게 되었습니다.구성 파일이나 키를 변경하지 않았습니다. 새 터미널 인스턴스를 만들지도 않았습니다.그냥 내 맥에서 gpg2가 왠지 이상한 상태인 것 같았습니다.

나의 경우, 나는 GitHub 설정에 저장된 이름을 키의 이름과 주석과 일치시켜야 했습니다.

그래서 만약에gpg --list-keys아온다를 합니다.uid [ultimate] Joe Blogs (fancy comment) <email@example.com>. 이름은 .gitconfig 파일 이름이어야 .Joe Blogs (fancy comment).

처음에 제 이름은 다음과 같이 제 이름을 지었습니다.Joe Blogs는 내 "키 를 "GPG"에서합니다.strace불행하게도, 그 오류는 다음과 같이 발생하지 않았습니다.strace그리고 하나는 일반적인 것을 얻을 것입니다.

error: gpg failed to sign the data
fatal: failed to write commit object

Git 구성이 gpgsign = true로 설정되었을 수 있습니다.커밋에 서명하지 않으려면 false로 설정합니다.리포지토리 폴더로 이동하여 파일 변경

nano .git/config

여기서부터...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = true

여기로...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@bitbucket.org:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false

는 설하는문해니다습을 했습니다.brew install gpg2그때 하는git config --global gpg.program gpg2

Git 구성에서 키가 만료된 경우에도 동일한 오류가 발생할 수 있습니다.

다의내용확시오십의 .cat .git/config그리고 찾아보세요signingkey값을 지정하고 만료되었는지 확인합니다.예인 경우 새 항목으로 업데이트합니다.

GPG 키를 저장하기 위해 스마트 카드/유비키를 사용하고 있고 다음을 설정한 경우signkey카드에 저장된 키에 의한 git config(위의 모든 답변이 당신의 문제를 해결하지 못하는 것처럼 보임)의 경우, 카드의 차단된 PIN이 이 문제의 근본 원인일 수 있습니다.

차단된 PIN을 확인하려면:

gpg --card-status

카운터가 다음과 유사한 경우

Reader ...........: Yubico YubiKey
PIN retry counter : 3 0 3

그러면 PIN이 차단됩니다(3번 시도 실패 후).

PIN 차단 해제 방법:

gpg --card-edit
gpg/card> admin
Admin commands are allowed

gpg/card> passwd
gpg: OpenPGP card no. … detected

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? 2
PIN unblocked and new PIN set.

1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit

Your selection? q

나를 위한 간단한 것.brew unintstall gnupg && brew cask reinstall gpg-suite문제를 해결합니다.

수동으로 홈브루가 설치된 gpg를 제거하고 전체 GPG Suite를 다시 설치합니다.

저의 경우, 여기 커밋 서명 문서에 나와 있는 gpg 구성과 smimsign 구성을 혼합했습니다. https://help.github.com/en/github/authenticating-to-github/telling-git-about-your-signing-key

몇 시간 동안 작업한 결과 gpg와 관련된 모든 설정을 해제하고 gpg를 재구성하는 것이 가장 좋은 수정 방법임을 알게 되었습니다.

@Jason Thrasher의 답변에서 언급했듯이, 다음을 사용하여 gpg와 관련된 모든 git 구성을 찾습니다.

git config -l | grep gpg

그런 다음 다음을 사용하여 모든 설정을 로컬로 해제합니다.

git config --global --unset <config_name>
git config --local --unset <config_name>

그런 다음 위에 제공된 공식 문서에 따라 다시 구성합니다.이게 도움이 되길 바랍니다.

2하는 내 않고(됨), 설정 해제(gpg 2.2.19), 설정 해제(gpg-agent 설정 해제),$DISPLAY 또는설정정을 설정$GPG_TTY콘솔에서 비밀번호를 요청하기 위해 핀엔트리-그놈을 사용하려고 했기 때문에 저에게 효과가 있었습니다.그리고 제 열쇠는 만료되지 않았습니다.

GPG가 콘솔 모드 핀엔트리를 사용하여 암호를 입력하도록 강제하는 방법은 무엇입니까?라는 유사한 질문에 대한 SuperUser의 답변에서 시스템에 GNOME과 같은 GUI가 있고 패키지 관리자가 GUI 핀엔트리 프로그램을 사용하도록 구성되어 있는 경우에도 문제가 발생할 수 있으며 이로 인해 이 프로그램이 중단됩니다.

저는 GPG가 메시지에 다시 서명하도록 하기 위해 pinentry-tty로 전환해야 했습니다.Ubuntu에서 이 작업은 다음 링크의 단계를 사용하여 수행할 수 있습니다.

sudo apt install pinentry-tty
sudo update-alternatives --config pinentry

두 번째 명령은 핀 입력 프로그램 목록을 보여주고 숫자를 입력하여 선택하도록 요청하므로 핀 입력-tty에 해당하는 것을 입력한 다음 추가 작업 없이 서명 메시지(및 git 커밋)가 다시 작동해야 합니다.

Linux/Windows 플랫폼 모두에서 이 문제가 발생했기 때문에 출력에 좀 더 주의를 기울여야 했습니다.다른 저장소에서 커밋에 서명할 때 동일한 설정을 사용할 수 있기 때문에 이것은 마음이 아찔했습니다.

git commit -m "test signing"
gpg: skipped "***63231079***": No secret key
gpg: signing failed: No secret key
error: gpg failed to sign the data
fatal: failed to write commit object

저는 "건너진" 라인에 강조를 더했습니다.가끔 레포를 복제할 때 키가 할당된 경우가 있습니다. 이 문제는 제가 너무 혼란스러워 액세스할 수 있었던 포크 레포를 누크하고 깃허브에서 다시 포크했습니다.그리고 "global config"를 생각하고 있었기 때문에 로컬 repo config를 볼 생각을 전혀 하지 않았습니다. 그리고 나서 알게 된 것은 다음과 같습니다.

[user]
    signingkey = 63231079

물론 nimrod는 작동하지 않습니다. 먼저 로컬 설정을 기본값으로 설정합니다. 그렇기 때문에 키가 잡히지 않습니다.다음을 통해 포인터를 설정합니다.git config그리고 그것은 그 이후로 효과가 있었습니다.

gpg란 무엇인가: GNU 개인 정보 보호

용도:

GPG는 두 당사자 간의 안전한 통신을 보장하는 훌륭한 방법입니다.중요한 정보를 안전하지 않은 네트워크 간에 쉽게 공유할 수 있습니다.

간단한 솔루션:

1단계: 키가 만료되었는지 확인하십시오.

gpg -K --keyid-format SHORT

2단계: 만료되지 않은 경우

git config --global user.dll 키

많이 검색해본 결과, 제 경우 gpg 키가 문제였습니다.

당신은 달리기를 해볼 수 있습니다.gpg --status-fd=2 -bsau <your GPG key>GPG 키가 정확한지 확인합니다.

키를 하십시오. 는 다음을 사용합니다. 다음을 사용하여 키를 확인합니다.gpg --list-secret-keys --keyid-format=long

다음과 같은 출력이 있어야 합니다.

/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Hubot 
ssb   4096R/42B317FD4BA89E7A 2016-03-10

그런 다음 다음을 사용하여 키를 업데이트합니다.

git config --global user.signingkey 3AA5C34371567BD2

이제 커밋을 다시 확인하면 키가 문제라면 커밋이 성공할 것입니다.GitHub 문서를 사용하여 수행할 수 있는 키를 업데이트하려면 암호를 설정해야 합니다.

자세한 내용은 https://gist.github.com/paolocarrasco/18ca8fe6e63490ae1be23e84a7039374 에서 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/41052538/git-error-gpg-failed-to-sign-data

반응형