Gitコマンド入門::Gitカスタマイズ機能(config,GPG設定)第七十四回
みなさんこんにちは! 今回は、前回の続きで、GPG設定を学習して行きますね。本線からは、ちょっと脱線してしまいますが、GPGの動作環境が整っていないと、パスフレーズ画面の入力でエラーとなり、処理が中断してしまいます。当然、これでは実際に署名ができませんので、今回は、GPG設定について補足しておきま~す! 環境設定でエラーにならない方は、この回はスキップしてもOKです!
今回は、こちらのドキュメントです!
タグへの署名 GPG 秘密鍵の設定を終えていれば、その鍵を使ってタグの作成時に署名できます。その場合は -a の代わりに -s を指定すればいいだけです。
前回の記事はこちらから!
git本家のドキュメントメニューはこちら!
まずは、私の環境は、以下のようになっています!
- CentOS 7.x (Gitローカル環境)
- gpg (GnuPG) 2.0.22
- Tera Term 4.86 (Windows10から,sshでリモート接続)
私の環境では、パスフレーズ画面で2箇所のエラー発生
-
gpg --gen-key
で、パスフレーズ画面エラー -
git commit -S -m "1st"
で、パスフレーズ画面エラー
補足事項
echo "test" | gpg --clearsign
でも、2番のエラーを確認することが可能。
gpg --gen-key
パスフレーズ画面エラー
前回にも記載しましたけど、パスフレーズの画面が起動せずに、そのまま、ユーザーによる取り消しとなって、処理が中断してしまう場合の対処方法です。
本名: Makoto Shiozumi
電子メール・アドレス: shiozumi@esmile-hd.com
コメント:
次のユーザIDを選択しました:
"Makoto Shiozumi <shiozumi@esmile-hd.com>"
// ここまでは、無事に処理が進みますが、OKの選択後、
// パスフレーズ入力画面が起動しませんでした。
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。
gpg: ユーザによる取消し
gpg: 鍵の生成が取り消されました。
// ↑↑↑ エラーを出力して処理が中断されます!(^▽^;)
正常に動作した場合、パスフレーズ入力画面が起動!
原因は、他のアカウントでログインすると発生!
こちらの原因は、いたってシンプルで、Tera Termでログインするとき、私は、root アカウントでログインしたあと、su - UserName
で、ユーザーアカウントを切り替えたのが原因です。従って最初から、ローカルユーザーアカウントでログインすれば、エラーにはなりません。
git commit -S -m "1st"
パスフレーズ画面エラー
署名付きでコミットしたときに、以下のようなエラーが出力されます!
$ git commit -S -m "1st"
error: gpg failed to sign the data
fatal: failed to write commit object
// ↑↑↑ エラーを出力して処理が中断されます!(^▽^;)
echo "test" | gpg --clearsign
エラー確認可能!
$ echo "test" | gpg --clearsign
次のユーザの秘密鍵のロックを解除するには
パスフレーズがいります:"Test Shiozumi <test@esmile-hd.com>"
2048ビットRSA鍵, ID 9970DB65作成日付は2021-04-08
gpg: ユーザによる取消し
gpg: no default secret key: 操作がキャンセルされました
gpg: [stdin]: clearsign failed: 操作がキャンセルされました
エラー回避方法、GPG_TTY 環境変数の設定
// まずは、標準出力先の確認、最後の数字2は、随時変化します!
$ echo $(tty)
/dev/pts/2
// GPG_TTY変数に、標準出力先を設定
$ export GPG_TTY=$(tty)
// 設定確認
$ echo $GPG_TTY
/dev/pts/2
export GPG_TTY=$(tty)
で環境変数を設定すると、今度は、パスフレーズ画面が出力されます。
echo "test" | gpg --clearsign
次のユーザの秘密鍵のロックを解除するには
パスフレーズがいります:"Test Shiozumi <test@esmile-hd.com>"
2048ビットRSA鍵, ID 9970DB65作成日付は2021-04-08
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
test
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
iQEcBAEBAgAGBQJgblWzAAoJECBEHISZcNtlysUH/jKtdGLqDqCdk7TBt7rbnUDn
RcPkrx5+ICNRg4/F9qgp4PPtc32BtT6kTlzN/XIKMBrbCHw5AND8R9aGtIXL3O93
nn5oZNFNm4Fl7ZISZNk2oM0frEWsi/xxu4Y/zsJKHEfkUx6hihE6gyhDW7rkUfpq
CKh+CGJAx1MgHmq63SDlygn+GV7hXptAeHfeSdZ2berHhPNV40pFM0FAi8XCibfg
KXdigJf1xXD2zHRnT1OmeIFdrG46DLnH4NKQDNnz5k6Eol+EOtJ7dKeRu7Ib75jp
InoPOu+FKlmlaTp7i9xh3uHPBaro4kolQyqt77z6IiklXUkgUr7HZs6/ovLdEOM=
=n6QI
-----END PGP SIGNATURE-----
~/.bash_profile にも追加設定
当たり前ですけど、Tera Term から一度ログアウトすると、環境変数 GPG_TTY も初期化されてしますので、合わせて、~/.bash_profile にも追加して置きましょう!
$ cat ~/.bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export GPG_TTY=$(tty)
// ~/.bash_profile の最後に、設定を追加しました!
gpg --passwd <UserName>
パスフレーズ再設定可能
パスフレーズ画面の不具合についての感想
原因は、そもそも単純なことで、GPG_TTY変数に画面の出力先のデバイスを設定すれば、それでよいのですが、gpg --gen-key
の初期化時は、GPG_TTY変数を指定していなくても、アカウントさえ間違えず、rootでログインしなければ正常に動作するので、結果的には、やや謎になってしまいましたね。(^▽^;) まあ~、理解を深めたいかたは、もう一度、rm -rf ~/.gnupg
で、フォルダーを削除して、何度かやり直してみましょう。
まとめ
さあ、今回はここまで、次回は、いよいよ署名付きのコミット、タグ作成を実行していきますね。正直なところ、GPGのパスフレーズ画面の不具合対応について、他の環境でどうなるのかは、調査不足で済みません。少なくとも、Mac環境の問題は、Googleで検索したところ、割と多そうでした。(^▽^;)
それでは、今回はここまで、お疲れ様でした!
Discussion