web-dev-qa-db-ja.com

Gitエラー-gpgはデータの署名に失敗しました

Gitの使用を開始したばかりで、homebrewを使用してgitとgpgをインストールします。何らかの理由で、git commitを実行するとこのエラーが発生します。このトピックに関する他の多くのstackoverflowの質問を調べましたが、どれも私にとってはうまくいきませんでした。このエラーを修正して、正常にアップロードできるようにする方法を教えてください。

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

トラブルシューティングのために、最初に試すべき2つのこと:

  • gitがgpgではなくgit config --global gpg.program gpg2を使用するように、gpg2を実行します
  • echo "test" | gpg2 --clearsignを実行して、gpg2自体が機能していることを確認します

それで問題ない場合は、次のことを試してください。

  • brew install pinentryを実行して、パスフレーズエントリ用の適切なツールがインストールされていることを確認します

そのインストール後にgit commitを再試行しても、まだ「failed to sign the data」エラーが表示される場合:

  • gpgconf --kill gpg-agentを実行して、ハングしている可能性のある実行中のエージェントをすべて終了します。

gpgconfがインストールされていない、または--killオプションがない場合は、mightこれを試してください:

  1. cp ~/.gnupg ~/.gnupg-GOODは、~/.gnupgのコピーを保存して、必要に応じて後で元に戻す
  2. brew install gnupg21はGnuPG 2.1をインストールします

~/.gnupg dirのコピーを保存する理由は、GnuPG 2.1がGnuPG 2.0以前との下位互換性のない方法でいくつかのキーデータを作成/変更する可能性があるため、ifに戻ることです後で、mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupgを実行できます。


それ以外の場合、GnuPG環境が機能していることを確認するために実行する基本的な手順がいくつかあります。

  • gpg2 -K --keyid-format SHORTを実行して、少なくとも1つのキーペアがあることを確認します

その出力に、使用するGnuPGの秘密鍵がないことが示されている場合は、秘密鍵を作成する必要があります。

  • gpg2 --gen-keyを実行して、GnuPGにキーペアを作成する手順を案内します

「デバイスの不適切なioctl」というエラーメッセージが表示された場合は、次のようにします。

  • export GPG_TTY=$(tty)を実行し、それを~/.bashrcまたは˜/.bash_profileに追加します
133
sideshowbarker

Gitは、署名するキーを知る必要があります。

GPG、gpg-agent、およびgpg.confファイルをセットアップしたら( このガイド を参照)、実行する必要があります

git config --global user.signingkey EB11C755

明らかに、最後の公開鍵を自分のものに置き換えてください。デフォルトですべてのコミットに署名する場合は、使用します

git config --global commit.gpgsign true
50
Xavier Ho

どういうわけかgitは、コミットごとにGPGに署名するように構成されています。 GPGでの署名は、gitを使用してコミットまたはプッシュする必要はありません。 gpg署名メカニズムがまだ構成されていないため、エラーが発生している可能性があります。

Gitが初めての場合は、最初にGPGに署名せずにGitを最初に動作させ、本当に必要な場合は後でサインインを追加してください。

Gpgに関してgitがどのように構成されているかを確認するには、次を実行します。

git config -l | grep gpg

以下を含む、0行以上の行が生成される場合があります。

commit.gpgsign=true

「commit.gpgsign」がtrueの場合、gpg署名が有効になっています。以下で無効にします:

git config --global --unset commit.gpgsign

その後、コミットを再度実行してください。これで、gpg署名なしで実行されるはずです。基本的なgitが機能するようになったら、gpg署名をミックスに追加してみてください。

30
Jason Thrasher

@sideshowbarkerと@Xavier Hoソリューションを参照して、次の手順で問題を解決しました。

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/pubring.gpg

sec rsa2048/A61C6FC 2017-06-29 [SC] [有効期限:2019-06-29]

git config --global user.signingkey 0A61C6FC

私の同僚が思い出した、追加する必要があります

export GPG_TTY=$(tty)

zshを使用する場合は〜/ .zshrcに、それ以外は〜/ .bash_profileに追加します


MacOSの場合、

gpg2はbrewのgpgと結合されるため、gpgコマンドはgpg2を指します。

brew install gpg2

醸造情報gpg

gnupg:安定2.2.6(ボトル入り)

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

パスフレーズ入力用のpinentry-macがあります

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

行を追加

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

21
V-SHY

キーの有効期限が切れていることを確認してください。有効期限を修正したら(必要に応じて新しいキーを作成する必要はありません)、gitは通常どおり機能します。

期限切れのキーを修正する1つの方法:

(注:$はコマンドラインプロンプトを表し、プロンプトの後にコマンドを入力し、各コマンドの後にEnterキーを押します)

適切なキーID(pub行の$ gpg2 --list-keysの後の文字)を見つけるための\

$ gpg2 --edit-key <key id>-これにより、プロンプトがgpg>に変更されたgpgシェルが開きます

gpg> expire-指示に従って、主キーの新しい有効期限を設定します

次に、期限切れのサブキーがある場合(subが行に表示されます)、有効期限もリセットします。

gpg> key 1-最初のサブキーを選択gpg> expire-指示に従って、サブキーの新しい有効期限を設定します

必要に応じて、後続のサブキーごとに繰り返します。

4
leanne

Gnupg 2.xにアップグレードした後にこの問題が発生しました。 gpg2はキーを異なる方法で参照していることがわかります。signingkey = ABC98F11にはまだ~/.gitconfig(gpg v1設定)がありました。 gpg2のキー識別子はより長くなります。 gpg --list-secret-keysで調べてください

3
carp

これは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.singingkey 95A854E0593B3214

その後、あなたは行ってもいいです! (--globalはオプションです)

別の方法として、sshキーでの署名を気にしない場合

git config commit.gpgsign false

この質問によるセキュリティ問題のため、これは推奨されないことに注意してください here および here

3
poon gilbert

Gitの設定が設定されている可能性がありますgpgsign = trueコミットを割り当てたくない場合はfalseに設定してください。リポジトリフォルダーに移動し、ファイルを変更します

nano .git/config

これから...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "Origin"]
    url = [email protected]: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 = [email protected]:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
    remote = Origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false
3
alvaropaco

私はそれを使用しています。 zshaをサポートし、LinuxのWindows Subsystemで動作します。

export GPG_TTY=$(tty)
2
Jamal Kaksouri

このエラーは、GPGキーの有効期限が切れている場合にも発生する可能性があります。これを解決するには、新しいキーを生成してGitに追加する必要があります。

1
osowskit

私にとって、このエラーは、Debian GNU/Linuxでgit tag -sからpinentry-gnome3に切り替えたときにpinentry-cursesで発生し始めました(update-alternatives --config pinentryを使用)。それはgpg(例:git tag -s)自体ではなく、gpg --clearsignでのみ発生しました。

この場合に再び機能させるために必要な唯一の変更は、Shellスタートアップファイルにexport GPG_TTY=$(tty)を追加することでした。

ただし、この質問に対する別の回答でこの修正のインジケータとして言及されている「デバイスの不適切なioctl」エラーメッセージは表示されませんでした。

注:このエラーが発生する原因は、この質問の他の回答で(通常はサイドヒントとして)export GPG_TTY=$(tty)を提案した人とはまったく異なるため、この質問にはexport GPG_TTY=$(tty)に言及する別の回答が必要であると判断しました主な修正であり、場合によっては唯一必要なこともあります。

1
Axel Beckert

git/certify/signの3つの個別のキーを使用して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     ]

問題を解決するために個別のサブキーを追加せずに新しいキーを作成しました。

0
Stuart Cardall

brew install gpg2をインストールしてからgit config --global gpg.program gpg2を実行する問題を解決しました

0
cperez08