Skip to content

GitHubにGPG鍵を登録する

GPG鍵の管理で作成した署名に使うサブキーの鍵IDが必要なので調べる。以下では —keyid-format=long しているが、ここで見える8バイトのIDはフィンガープリントの末尾なので —with-subkey-fingerprint でもいい。

Terminal window
$ gpg --list-keys --keyid-format=long
/home/lufia/.local/share/gnupg/pubring.kbx
------------------------------------------
pub ed25519/013948EA09EEDAD6 2025-03-15 [SC]
53508FECCFAF7FFCF9F6AD46013948EA09EEDAD6
uid [ultimate] KADOTA, Kyohei <lufia@lufia.org>
sub ed25519/8D89585B4B628220 2025-03-15 [S] [expires: 2027-03-15]

ここでは署名用サブキーのIDは 8D89585B4B628220 なので、以下のコマンドで出力した内容をGitHub設定の SSH and GPG keys に登録する。

Terminal window
gpg --armor --export 8D89585B4B628220

このとき、複数のPCでそれぞれサブキーを作成した場合はどうするのか。gpg --exportコマンドと!の挙動を整理に書いたが、どのような引数で実行しようと常にマスターキーの公開鍵が含まれる。そうするとGitHubのUIから登録したとき、2つ目以降の鍵登録が以下のエラーで失敗する。

Key already exists and Public key already exists

どうやらGitHubでは、同じマスターキーから作られた異なるサブキーを分けて登録できないので、以下のどちらかを選択しなければならない。

  1. 複数のPCで同じサブキーを利用する
  2. 複数のPCで異なるサブキーを利用するが、公開鍵はすべて1つにまとめてGitHubへ登録する

GPGではサブキーを普段使いするとき共有しないと決めたので、後者の方法で対応する。マージするときは以下のようにする。不要になった鍵を覚えておかなければいけないのが厳しいのでGPG鍵リストを書いた。

Terminal window
$ curl https://github.com/lufia.gpg | gpg --import
$ gpg -k --keyid-format=long
[keyboxd]
---------
pub ed25519/1A3BB38A4BC27A81 2025-03-17 [C]
C7BF8AB911C50EE3291DD45F1A3BB38A4BC27A81
uid [ 究極 ] KADOTA, Kyohei <lufia@lufia.org>
sub ed25519/209D69BD8ED702E2 2025-05-01 [S] [有効期限: 2028-04-30]
sub rsa2048/4D9F3F8C6FD3990A 2025-05-01 [A]
sub ed25519/ECD6D6D83FC11479 2025-05-01 [A] [有効期限: 2028-04-30]
sub ed25519/A08A761FFF8FAE37 2025-03-19 [S] [有効期限: 2027-03-19]
sub ed25519/2D9B751B97D95DFA 2025-03-17 [S] [有効期限: 2027-03-17]
# 不要な鍵があるなら消す
$ gpg --delete-keys 2D9B751B97D95DFA
$ gpg -a --export

登録が終わればGitHubの公開鍵URLから参照できる。