GitHub署名付きでコミットしてかっこつける
署名とは
このようにVertified
と書かれたコミットを見たことがありませんか?
かっこよ!!!
調べてみると公式のヘルプページにはこう書かれていました
GPG あるいは S/MIME を使って、タグやコミットにローカルで署名できます。 それらのタグやコミットは検証済みとして GitHub上でマークされ、他の人々がその変更が信頼できるソースから来たものと信頼できるようになります。
つまり、「これは信頼できるコミットだよ」って表現することができるということですね。(かっこつけるためではないようです)と
そもそも、署名を行わない場合GitHub側でクライアントとGitHubアカウントとの紐付けをメールアドレスの一致のみで行います。もし、Gitに他人のメールアドレスを設定した場合そのメールアドレスを持ったGitHubアカウントと紐付けられます。
ここで、自分のアカウントと署名を紐付けることで自分のアカウントによるコミットと証明する仕組みだそうです。
この署名にはGPGとS/MIMEの2種類があるそうです。今回はGPGを扱っていきます。もう1つのS/MIMEはどうやらOrganizationで使うものらしいです。
GPGを使い始める
GPGのインストール
Windowsの場合はGpg4win、mac OSの場合はGPGToolsをインストールしておきます。
Linuxの場合は
$ sudo apt install gpg
でインストールできます。
個人的にはWindowsのかたもWSLを使ったほうが楽だと思ういます
新しい鍵を作る
今回は2種類ペアの鍵が必要になります。
-
このコードをコマンドプロンプト/ターミナルに入力し実行します
$ gpg --full-generate-key
-
暗号化の方式を聞かれるのでそのままEnterを打ちます。
-
暗号の長さは4096ビット以上ではなければならないらしいですが、RSAの最長値は4096ビットのでそのまま
4096
と入力します。 -
鍵の有効期限を設定します。デフォルトの無期限で良い場合そのままエンターキーを押します。
-
内容を確認してくださいと聞かれるので、
y
と入力してEnterを押します。
ここまでの流れはこんな感じです
-
Realname:って聞かれてますけど普通にGitHubのID・メールアドレスを入力します。このとき、Gitに登録されているメールアドレスを指定してください。
ちなみにコメントは何も書かずにEnterを押して大丈夫です。 -
修正する点がなければ
O
と入力します。(IDを間違えた場合はN
、メールアドレスを間違えたらE
と入力します) -
パスワードを指定が求められるので、突破されないようなパスワードを指定します。
パスワード打つ画面ハッカー感があって格好いい -
この画面が出たら成功です!
確認・GitHub連携
$ gpg --list-secret-keys --keyid-format LONG
と打つと先ほど作成したキーが出てくるはずです。
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/appare/.gnupg/pubring.kbx
-------------------------------
sec rsa4096/________ 2020-09-24 [SC]
/////////////////////////////////
uid [ultimate] appare45 <mail@example.com>
ssb rsa4096/****************** 2020-09-24 [E]
この図の_________
の部分ををコピーしておきます。
(僕はコピーするところを間違えてめっちゃ時間をとられました)
$ gpg --armor --export ______________
として実行します。
すると、謎の文字列が出力されます。これが生の暗号鍵です。-----BEGIN PGP PUBLIC KEY BLOCK-----
から-----END PGP PUBLIC KEY BLOCK-----
の部分をコピーします。
GitHubの設定メニューからGPGキーを追加します。フィードに先ほどコピーした内容を貼り付けます。
$ test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
$ echo 'export GPG_TTY=$(tty)' >> ~/.profile
この2つのコマンドを実行します
Gitに登録
ローカルのGitに対して、コミット時に使用する鍵を指定します。
$ git config --global -e
このコマンドを実行すると自動的にエディターが起動して.gitconfig
が表示されます。
このはじめの部分([user]
)のsigningkey=先ほどコピーした鍵のid
を追加します。
[user]
name = appare45
email = 64473501+appare45@users.noreply.github.com
signingkey = 5889DA3AEFAC1F3A
これで設定は完了です。
コミット
かっこつけてコミットするには
$ git commit -S -m 'コミットメッセージ'
としてあげればOKです。
Tips
鍵に複数のメールアドレスを登録する
GPGの鍵に対して複数のメールアドレスを登録したい場合があると思います。その場合、すでにある鍵に対してメールアドレスを追加できます。
$ gpg -K
鍵の一覧が表示されるので、編集したい鍵のID(赤い部分)をコピーします。
$ gpg --edit-key 先ほどコピーしたID
すると入力待ちの画面になります。adduid
を入力します。
gpg > adduid
すると先ほどと同じID登録に進むので同じ手順で登録を行います。
IDを追加すると、鍵の内容が新しくなるのでGitHubに登録している鍵も1度削除して登録しなおしてください。
コミット時にデフォルトで署名するよう指定する
コミットの時毎度-S
を付けるのは面倒なのでデフォルトで署名をオンにします。
$ git config --global --add commit.gpgsign true
これで自動的に署名が行われるようになりました。
上手くいかないときは
僕はこれをやったら上手くいきました。
$ echo "test" | gpg2 --clearsign
としてパスフレーズを入力すると上手くいきます
Discussion