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年7月1日作成

エラー:gpgがデータに署名できませんでした致命的:コミットオブジェクトの書き込みに失敗しました

-私はまだ変更をコミットできますgit commit -a -m "message"

同じことを克服する方法はありますか?またはgpg、gitのアップグレードに対応するために構成で必要な変更はありますか?


アップデート1

また、以下、さらに有用性を求めてGPGキーでのGitの「autosign」コミットに方法はありますか?。私はすでに使用してキーを設定しました

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では、問題なくコミットに署名できます。どうなるかわかりません。
イルミネーター

5
user.signingkey奇妙なことに、私の問題を修正して追加しました。
Xavier Ho

1
@nullpointer私はそこから自分の回答を削除しました。詳細に調べた後、それが重複していることに気付いたからです!
Shayan Amani 2017年

1
皮肉なことに、私は新しいものをセットアップするようにマシンを変更し、自分の質問を探していました。提案された解決策はどれも、単純に始めるだけでは十分にきれいに見えません。
ナマン2018年

1
私にとっての修正は、git config user.namewas!= PGPキーの作成時に使用された名前
stacksonstacks

回答:


464

OSXでこの問題に遭遇しました。

元の答え:

それはの場所に変更(BREWの)GPG更新のように思えるgpggpg1、あなたはGPGアップgitのルックスバイナリを変更することができます。

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をインストールし、後者はそれを使用するために必要なハックです。トラブルシューティングについては、次の回答を参照してください(これは醸造ではなくLinuxに関するものです)。これは優れたテストを示唆しています。

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

このテストが成功した(エラー/出力にPGP署名が含まれていない)場合は、最新のgpgバージョンに正常に更新されています。

これでgit署名を再び使用できるようになります!
次のものが必要になることに注意してください。

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 2016年

5
シンボリックリンクgnupg2brewめちゃくちゃにしたwithの更新gpgは削除されたようbrew link --overwrite gnupg2です。私はを使用してリンクを修正しました。
Brice

8
うーん...動作しません。それでもxcodeへのサインインでエラーが発生します。
アルバートT.ウォン

1
@DrBecoは元の場所/動作ではありませんか?私はまだosxで同じ問題を抱えています(私gpg1は最近、醸造をかなり最近更新したと思います)、まだエクスポートされた実行可能ファイルです。
アンディヘイデン

29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentry最終的に私のためにそれを修正しました
Dan Bechard 2018

317

gnupg2とgpg-agent 2.xを使用する場合は、必ず環境変数を設定してくださいGPG_TTY

export GPG_TTY=$(tty)

一般的な問題については、GPGのドキュメントをご覧ください。


17
魚を使用する場合set -x GPG_TTY (tty)は、プロフィールを付けてください。
fasfsfgs 2017

@StuartCardall chownコマンドのポイントは何ですか?通常、ログインまたは疑似ttyの作成時には、システムプロセスによってすでに割り当てられています。それが他の誰かによって所有されていて、あなたがrootでない場合、失敗します。グループが他のものである場合、それはおそらく問題ではなく、ユーザーは通常、グループttyに属しません。
poolie

@poolie -あなたならば、それは重要surootリモートサーバ上
スチュアートCardall

6
変数をに追加しました~/.zshrc。ターミナルに正しく接続されたので、もう一度コミットできます。あなたのすべての協力に感謝します!
Alex Gurrola

これはGitHubの説明にもあります:help.github.com/articles/telling-git-about-your-gpg-key
bonh

198

すべてが失敗した場合は、を使用GIT_TRACE=1してgitが実際に何をしているかを確認してください。

$ 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 2017年

4
これは実際に私自身の問題を解決するのに役立ちました。これは、このステータスメッセージのあらゆる種類の問題の解決策です。+1
xHocquet 2017

デバッグのウォークスルーをありがとう。私の鍵も期限切れになりました。
Sgnl

2
ありがとう!これが私の問題につながりました。不思議なことに、私のローカル.git/configname1つのプロジェクトで、署名メールと一致しない指定をしていました。それはそれを拒否するのに十分でした。
18年

1
まあ、gpg -bsau <key>私のマシンで実行しても何も実行されません。これは実行に時間がかかりすぎると思いますか?それとも、キーを使用しても問題ないということですか。@VonC洞察はありますか?
ナマン2018年

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組織は非常に小さなチームによってバックアップされており、リポジトリにはgnupg.orgbrew install gnupgの作業を活用する使用者対5人の貢献者しかいませ
sunknudsen

それが他の人を助ける場合、私の問題は、無効なローカルuser.signingkeyセットがあったことでした。これは、ソースツリー構成で気づかなかったし、グローバル設定でもなかった(ローカル構成を調べようとは思わなかったため)両方のローカルを確認してください(git config --local --get user.signingkey)そして、グローバル(git config --global --get user.signingkey)は同じであるか、または無効です(git config --local --unset user.signingkey)の場合はローカルの設定を解除します
Glenn 'devalias'

OSX(10.13.06)では、bash:pinentry-program:コマンドが見つかりません
cgl

59

gpg-agent古いデータでスタックしている可能性のあるプロセスの強制終了に役立つ場合があります。そのため、新しくgpg-agent始めた人はパスワードを要求します。


2
これでうまくいきました。
danyim 2017

12
gpg-agent --daemon開始に使用
FooBar

1
私もgpg-agentを再起動しなければなり
ませんでした

8
macOSでプロセスを終了するには:killall gpg-agent
incleaf

1
ubuntugpgconf --kill gpg-agent
Adam

38

以下の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.PGP echo "test" | gpg --clearsign 署名が取得されている場所でもう一度試します。

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

6.適用する git commit -S -m "commitMsz"


1
これが私にとっての解決策でした!どうもありがとう!
upInCloud

これが問題であるかどうかを判断する方法の優れたウォークスルー。
Philippe Signoret

これは私のためにそれをしたものです。どうもありがとう!
Allan Guwatudde

export GPG_TTY=$(tty)トリックでした。.zshrcファイルに追加しました
シェーンスティルウェル

22

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(STARTおよびEND行が含まれています)

問題がまだ存在する場合:

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

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

問題がまだ存在する場合:

インストールhttps://gpgtools.orgを、あなたが押すことで使用することを鍵に署名サインインして、メニューバーから:キーを - >ログイン

問題がまだ存在する場合:

移動先:グローバル.gitconfig私の場合であるファイル:/Users/gent/.gitconfig および変更.gitconfigのファイルを(鍵を生成しながら、メールと名前を作成したことを1と同じであることをご確認ください)

[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

ここに私の2セント:

キーを作成してgpg-agentに追加するときに、と呼ばれるものを定義しますpassphrase。今、passphraseある時点で期限が切れ、gpg再度署名を開始できるように、キーロックを解除するために再度入力することができなければなりません。

とインターフェイスする他のプログラムを使用するとgpggpgパスフレーズの入力を求めるプロンプトが表示されませ(基本的にgpg-agent、デーモン化すると、入力ダイアログを表示できない場合がありますstdin)。

解決策の1つは、gpg --sign a_file.txtキーを作成したときに入力したパスフレーズを入力することです。gpg-agent自動的に署名されるはずです)。

常にこれを行う必要がないようにパスフレーズのタイムアウトを長く設定する方法については、この回答を参照してください。

または、パスフレーズを完全に削除することもできます ssh-keygen -p

編集:a man gpg-agentを実行して、上記が自動的に行われるようにする方法について読み、行を追加します。

GPG_TTY=$(tty)
export GPG_TTY

bashを使用している場合は.bashrcで(これは正解ですが、私は上記の私の考えの列も保持しています)


@ george-daramouskasに感謝します。これは私の問題でした。
ニックバーカー

10

2016年10月更新:871号で「署名がGit 2.9.3で機能しなくなった」と言及

2日前(2016年10月4日)にリリースされたGit for Windows 2.10.1では、コミットとタグの対話型GPG署名が修正されました。

最近のgitのgpg記号の変更(Linuxでは問題が発生しません)により、Windowsでは、非MSYS2-gitがMSYS2-gpgと対話する方法に問題が発生します。


元の答え:

7.4 Git Tools-Signing Your Work」を読んで、あなたはあなたのuser.signingkey」の構成セット。

gpgに関する最後の大きなリファクタリング(Git 2.10より前)は、コミット2f47eae2aでした。ここで、エラーメッセージはgpg-interface.c

そのファイルのログは、コミットaf2b21e(Git 2.10)の最近の変更を明らかにします

gpg2はデフォルトですでにロングフォーマットを使用していますが、互換性の理由から、ほとんどのディストリビューションでは「gpg」が古い1.xバージョンのままであるようです。また、古いバージョンのgpgでは32ビットの短いIDしか表示されないため、非常に安全ではありません。

これは実際には検証自体には関係ありません。検証に合格した場合、pgp署名は適切です。
ただし、実際にはまだキーがなく、フェッチしたい場合、または検証に使用されたキーを正確に確認したい場合は、より正確にキーを指定する必要があります。

したがって、user.signingkey構成の指定方法と、使用しているgpgのバージョン(gpg1またはgpg2)をチェックして、エラーメッセージに影響があるかどうかを確認してください。

エラーメッセージの条件を変更するcommit 0581b54もありgpg failed to sign the dataます(commit 0d2b664を補完します)。

現在、stderrからの読み込みは一切行っていません。ただし、将来のパッチで使用したいので、これによって準備も整います(その場合、gpg すべての入力を読み取る前に書き込みを行いますが、キーuidがパイプバッファーをいっぱいにすることはまずありません)。

コミット4322353はgpgが一時ファイルを使用することを示しているため、その周りに正しい問題が存在する可能性があります。

ハードケースを処理するtempfileオブジェクトを使用するように変換し、不足しているクリーンアップ呼び出しを追加します。


私は私のuser.signingkey設定を持っています。も使用していgpg (GnuPG) 2.0.3ます。
ナマン

@nullpointer回答を編集しました。Gti For Windows 2.10.1でも問題が解決するかどうかを確認できますか。
VonC、2016年

最新のアップデートでは申し訳ありませんが、WindowsではなくMacOSXで作業しているため、これを確認できませんでした。
ナマン

10

gitトレースは私の状況を非常に明らかにしていました...

   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うまくいき、本当に役に立ちました。
フィリップオヘネロボバログン

1
mate ...答えを出すまでに何時間かけてこれを整理しようとしていたのか想像できません...それはずっと鍵の名前でした..ありがとうございます!ありがとうございました!ありがとうございました!
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 2018

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)'
オルダーズ

1
これで問題なく動作します。後で環境変数を設定する必要すらありませんでした。
ニックラモー

8

私は同様の答えを見てきましたが、私にとってうまくいったこととまったく同じではありません。Linuxでは、次のコマンドでkillして再起動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 0key 1、次の手順入力に煮詰めkey 0た後expire、プロンプトに次のことを。次にを繰り返しkey 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キーが生成されていない特定のリポジトリで会社の電子メールを使用していたことでした。
ルービック

3

GPGキーのuidに関連付けられたメールがgitで使用しているメールと異なる場合は、別のユーザーIDをキーに追加するか、メールが正確に一致するキーを使用する必要があります。

次を使用して別のUIDを追加できます。

$ gpg --edit-key

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)ので、私は:

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/

ps。私のキーはもともとブートキャンプのウィンドウズ7で作成され、Mac Air(同じ物理マシン、仮想的には異なる)にエクスポートしました


2

私はUbuntu 18.04を使用していますが、同じエラーが発生し、何週間も心配されました。最終的に、gpg2は何も指し示していないことに気付きました。したがって、単に実行する

git config --global gpg.program gpg

そして、多分、それは魅力のように働きます。

署名済みコミット

これで、コミットのタグが確認されました。


2

このエラーに遭遇したのは、構成の問題ではなく、キーの有効期限が切れたためです。OSXでの有効性を拡張する最も簡単な方法は、GPGキーチェーンアプリを開いて(インストールしている場合)、自動的に拡張するように求めるメッセージが表示されます。2回のクリックで完了です。うまくいけば、これは仲間のGoogle社員に役立ちます:)


2

これはUbuntuで突然起こり始めました。最近の更新でうまくいったかどうかはわかりませんが、既存の問題のどれも私には当てはまりませんでした(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-ttyaptitude 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スイートの一部としてインストールされました、brewではなく。

それでも、「gpgbrewで利用可能な最新のバイナリを使用する」というアドバイスに要約されているように感じました。だから私は試しました:

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

brewからの新しい実行可能ファイルを指すようにgpgonを正しく変更したことを確認しました$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

またgpg、使用するバイナリをgitに明示的に指示しました。

git config --global gpg.program gpg

まあ、それは経路に敏感なので、それは完全に水密ではありません。私は実際にはgitがbrewの呼び出しに切り替えたことを疑いもなく確認するまでは行きませんでしたgpg

いずれにせよ、これはgit commit私のコミットに再度署名するのに十分なものではありませんでした。


最終的に私のために働いたのは、GPG Suite更新することでした。私はバージョン2016.7を実行していましたが、2016.10に更新すると問題が解決することがわかりました。

を開いてGPG Keychain.app、「アップデートを確認…」を押します。新しいバージョンでは、署名されたコミットが再び正しく機能しました。


最新バージョンにアップデートしてみたのですが…うまくいきませんでした。xcodeにサインインしようとしています。
アルバートT.ウォン


1

@birchlabsと非常によく似ていますが、多くの掘り下げ/検索を行った結果、GPGではなくGPGスイートであることがわかりました。私はそうしましたcask reinstall gpg-suite、そしてそれは私のためにそれを解決しました。


0

これがランダムに発生しただけで、私の場合のように過去に完全に機能していた場合は、ログアウト(cmd+shift+q)して再度ログインしてみてください。


0

私の場合、他の回答で述べられている解決策はどれもうまくいきませんでした。問題は1つのリポジトリに固有であることがわかりました。リポジトリを削除してクローンを作成すると、問題が解決しました。


0

奇妙なものですが、端末が十分な大きさであることを確認してください!実行すると、小さすぎるかどうかecho test | gpg --clearsignがわかります。これにより、非常に明白なエラーメッセージが表示されます。それが十分に大きくない場合、GPGエージェントは小さなncursesボックスを表示できません。

GUIエージェントまたはncursesを使用しないものを使用する場合、これは適用されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.