アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

GItHub で GPG 署名つきの commit をする

GPG 署名付きの commit をすることで、由緒正しき人物からの commit かどうかを知ることが可能になる。ゴールは下記の画像のようになる。

f:id:codehex:20191012133601p:plain

これをするためにやったことをメモする。このコミットはここから確認できる。

これは GitHub 公式記事の Generating a new GPG key を読みながら進めた。

環境は Mac なので gpg コマンドをインストールする必要があった。

$ brew install gpg

インストール完了後にバージョンを確認する。

$ gpg --version
gpg (GnuPG) 2.2.17
...

といった感じで表示され、今回インストールしたバージョンが 2.2.17 だと言うことがわかる。GitHub の記事から次のコマンド実行する。

$ gpg --full-generate-key

ユーザー ID を入力するところまで、鍵の長さの項目以外は default で良いので Enter を押していく。鍵の長さは 4096 で作る。

ユーザー ID を入力するところでの名前はパブリックに公開している自分のアカウント名を入力した。メールアドレスは GitHubコミットメッセージ用に提供している code-hex@users.noreply.github.com とした。

進んでいくと下記のメッセージが表示されるので O を入力する。

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? 

そうすると文字化けした謎のテキストボックスが表示され続けるのでとりあえず Enter を叩きまくった。

完了するので gpg で作成した private key リストを確認する。

$ gpg --list-secret-keys --keyid-format LONG

実行すると ssb rsa4096/<GPG-ID> 2019-10-12 [E] のような行が表示されるので <GPG-ID> を基にして GPG key の内容をコピーする。ちなみにこの中身は -----BEGIN PGP PUBLIC KEY BLOCK----- で始まり -----END PGP PUBLIC KEY BLOCK----- で終わるような内容になってる。

$ gpg --armor --export <GPG-ID> | pbcopy

これでコピーした内容を GitHub の下記のページを参考に保存する。

help.github.com

今度は手元の git コマンドに GPG key を使ったコミットをやっていく気持ちを設定に残す。

$ git config --global commit.gpgsign true
$ git config --global user.signingkey <GPG-ID>

これで git commit -S -m '<COMMIT MSG> 等をすることで署名がついた commit をすることが可能になる。

GPG private key の管理

個人で 1password を契約してるのでここにファイルをアップロードした。

support.1password.com

ファイルを export する方法は

  1. $ gpg --export-secret-keys <GPG-ID> > my-private-key.asc
  2. 1password へアップロード

別のマシンからは

  1. 1password からダウンロード
  2. $ gpg --import my-private-key.asc
  3. $ gpg --list-secret-keys で確認