Git commit時にGPG署名に失敗する
概要
GPG署名に失敗する。
今回の解決策は、このIssueに書いてる通り、export GPG_TTY=$(tty)
(fish使いはset -Ux GPG_TTY (tty)
)を実行すること。
無事、コミットにVerifiedの文字を輝かせることができた。
署名に失敗する
コミットにVerifiedを付けたいのでGPG署名をしようと思った。 鍵発行、登録、ローカル設定を順調に終え、さあコミットだ!という段階で以下のエラー
$ git commit -m "First commit" -S error: gpg failed to sign the data fatal: failed to write commit object
GPGのtestをしよう
ググるとgpg-agent
がないとか言われたがそんなことはなかった。pinentry
もあるし(そもそもないと鍵作成できないのでは)、gpg
が古いのか……?など色々調べていったときに以下のサイトにぶち当たった。
For troubleshooting, see this answer (though that is about linux not brew), it suggests a good test:
echo "test" | gpg --clearsign
github - gpg failed to sign the data fatal: failed to write commit object [Git 2.10.0] - Stack Overflow
で、結果は
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 test gpg: signing failed: Inappropriate ioctl for device gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
あーやっぱり失敗するんですね……(バージョン古いとかかな~と思った)
解決へ
signing failed: Inappropriate ioctl for device
で検索してようやく解決に至った。その方法が以下のexport実行
Since this is a fatal error and also quite difficult to debug, maybe the fix could be put somewhere (in the provided command line?):
export GPG_TTY=$(tty)
gpg: signing failed: Inappropriate ioctl for device · Issue #2798 · keybase/keybase-issues
僕はfisher(この呼称は正しいか?)なのでゴキゲンに(追記: set -Ux GPG_TTY (tty)
echo 'set -x GPG_TTY (tty)' >> $__fish_config_dir/conf.d/gpg.fish
1)を叩いた。bash, zshの人は上記引用コマンドを打てばいいと思う。
export後にecho "test" | gpg --clearsign
すると、
┌────────────────────────────────────────────────────────────────┐ │ Please enter the passphrase to unlock the OpenPGP secret key: │ │ "John Doe <johndoe@nanashi.local>" │ │ 4096-bit RSA key, ID XXXXXXXXXXXXXXXX, │ │ created 2020-02-22. │ │ │ │ │ │ Passphrase: __________________________________________________ │ │ │ │ <OK> <Cancel> │ └────────────────────────────────────────────────────────────────┘
パスフレーズを間違えないように打って認証成功。無事にコミットもできた。
後日談
いや当日談なんだが
コミットもできたしプッシュして早速Verifiedを見に行ったら
原因はかんたんで、公開鍵のコピペをミスってた。Hyper.jsというターミナルソフトを使っているのだが、(おそらく設定不足で)コピペが微妙におかしい時がある。
今回は-----BEGIN PGP PUBLIC KEY BLOCK-----
の次の行に鍵本文(?)が貼り付けられていた。ちまちま直してUpload成功させたあとにようやく
-
Terminalソフトを(よっぽど稀だが)変えるとおそらく確実に、また、ターミナルを開き直してGPGの認証をするときは稀に「GPG認証が立ち上がらない」「パスワードが隠れない」「うまく打てない(
pinentry
の不調のような動作)」のような現象が起きる。このとき、$GPG_TTY
とtty
の値が異なっていた。ターミナルを開くたびに変わるのであればターミナルを開くたび(=ログインするたび)にtty
の更新値に合わせて$GPG_TTY
を設定するように変更した。↩