Linuxマシンでgit(github)のコミットにGPG署名をする

コミットに署名が求められるOSSにPRを送りたくて、Linuxマシンのローカル環境で gpg 署名付きコミットできるようにしてみたので、手順を残しておきます。

貢献したいOSSのREADME.mdやCONTRIBUTING.md等に sign your commit のように記載がある場合にgpg 署名付きコミットできるように設定します。

gpg 署名付きコミットの場合、Github上では以下のように Verified というバッジが表示されます。

f:id:moritamorie:20210211183540p:plain

前提

  • Ubuntu 18.04 LTS Desktop
  • GPA 0.9.10

インストール

gpa((GnuPG)インタフェース)とseahorse(GNOMEフロントエンド)をインストールします

$ sudo apt-get install gpa seahorse

GPGキーの生成

Githubの以下のドキュメントに従って、GPGキーを生成しました。

docs.github.com

$  gpg --full-generate-key
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ご希望の鍵の種類を選択してください:
   (1) RSA と RSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
あなたの選択は?
=> そのままEnter(RSA と RSA (デフォルト))

RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (3072) 
=> 4096

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)
=> 設定したい有効期限を入力、"1y"1年になる

GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。

本名: 【Githubアカウント名:moritamori】
電子メール・アドレス: 【Githubに登録しているメールアドレス】
コメント:【なし】

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

$ gpg --list-secret-keys --keyid-format LONG
uid                 [  究極  ] moritamori <xxxxxxxxxxxxxxxxxx@gmail.com>
ssb   rsa4096/<GPG-ID> 2021-02-11 [E]

確認した<GPG-ID>の箇所を控えて、以下を実行し、クリップボードに値をコピー。

$ gpg --armor --export <GPG-ID> | xsel --clipboard --input

xselmacpbcopy のようにパイプで渡される出力をクリップボードにコピーできるアプリ。

もし、インストールしていなければ入れておきます。 sudo apt-get install xsel

Githubに貼り付ける前にクリップボードの値が以下のようなテキストになっていることを確認。

-----BEGIN PGP PUBLIC KEY BLOCK-----
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
-----END PGP PUBLIC KEY BLOCK-----

GPG キーをGithubに登録

Githubの以下のドキュメントに従ってGPG キーを登録します。 docs.github.com

f:id:moritamorie:20210211180930p:plain

f:id:moritamorie:20210211181150p:plain

GPG署名を有効化

ローカル環境で、上記で生成した<GPG-ID>をgit configで設定。

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

以降は、 git commit すれば自動的にコミットが著名されます。

GPG鍵を削除する時

gpg --list-secret-keys でuidを確認します。

$ gpg --list-secret-keys --keyid-format LONG
uid                 [  究極  ] moritamori <xxxxxxxxxxx@gmail.com>
ssb   rsa4096/xxxxxxxxxxxxxxx 2021-02-11 [E]

gpg --delete-secret-keysで削除

$ gpg --delete-secret-keys moritamori

参考資料