20
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Gitでgpg署名付きcommitをするまで

Posted at

ふとgitでcommitする際に署名をつけてみたいと思いやってみました。
GitHubにgpg署名付きのコミットをするを参考にしましたが、現在では一部うまく動かなかったところがあったので一部変更しながら紹介します。
Mac環境(macOS Mojave)で検証しました。

TL; DR

# 必要なツールをインストール
$ brew install gpg2 pinentry-mac

# 鍵を生成
$ gpg --full-gen-key

# 生成した鍵のIDを調べる
$ gpg --list-secret-keys --keyid-format LONG

# Gitの設定
$ git config --global gpg.program gpg
$ git config --global user.signingkey {鍵のID}

# gpgの設定
echo "pinentry-program /usr/local/bin/pinentry-mac" > ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agent

# 署名付きでコミットする
git commit -S

gpgをインストールする

gitではgpgを使ってコミットに署名をつけることができます。(詳細はこちら)
必要なツールをbrewでインストールします。

$ brew install gpg2 pinentry-mac

以前はgpg-agentもインストールしていましたが、現在はgpg2の中に統合されたようです。
No available formula with the name "gpg-agent"

鍵生成

署名に使う鍵を生成します。

$ gpg --full-gen-key

その後色々と聞かれるので適宜設定していきます。
オプションを細かく設定したかったので--full-gen-keyを指定しましたが、こだわりがなければ--gen-keyでも構いません。
名前とメールアドレスはgitで設定しているものと同じにしましょう。下記のコマンドで確認できます。

$ git config --get user.name
$ git config --get user.email

gitの設定を変更する

はじめに生成した鍵のIDを確認します。

$ gpg --list-secret-keys --keyid-format LONG
/Users/ユーザ名/.gnupg/pubring.kbx
--------------------------------
sec   rsa4096/{鍵のID} 2019-01-25 [SC]
      ***
uid                 [ultimate] 名前 <メールアドレス>
ssb   rsa4096/*** 2019-01-25 [E]

確認した鍵のIDをgitに登録します。

$ git config --global gpg.program gpg
$ git config --global user.signingkey {鍵のID}

gnupgの設定をする

~/.gnupg/gpg-agent.confに設定します。

~/.gnupg/gpg-agent.conf
pinentry-program /usr/local/bin/pinentry-mac

その後設定を反映するためにgpg-agentを一度終了させます。

gpgconf --kill gpg-agent

署名時に自動起動するので再び起動する必要はありません。
How can I restart gpg-agent?

上記の手順を行わなかったため、コミット時に

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

とエラーが出て署名付きでコミットできませんでした。

署名付きでコミットする

git commit -S

-Sオプションをつけることで署名できます。

GitHubに鍵を登録

$ gpg --armor --export {鍵のID} | pbcopy

pbcopyは出力をPasteboard(クリップボード)にコピーします。
あとはGitHubの鍵の設定からNew GPG Keyをクリックし、
出てくるテキストボックスに貼り付け、Add GPG Keyをクリックします。

あとがき

以上で署名付きでコミットができるようになるはずです。
もし間違いなどがあればご指摘いただければ幸いです。

Reference

https://qiita.com/kentfordev/items/0e44f563caf39cd3eb9e
https://git-scm.com/book/ja/v2/Git-のさまざまなツール-作業内容への署名
https://github.com/pstadler/keybase-gpg-github/issues/30
https://superuser.com/questions/1075404/how-can-i-restart-gpg-agent/1150399

20
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?