一緒に仕事をしてる人のコミットの履歴に "Verified" って出ててかっこいいなーと思ったのでやってみました。
GitHubの公式なドキュメントは以下のURLです。
しかし、GitHubの公式なガイドを見ながらやっても 「You need a passphrase to unlock the secret key ...」 というエラーが出てうまくいきませんでした。
そこで、 @bmhatfield さんという方がGistで公開している内容を試したらうまくいきましたので、その方法を紹介します。
僕の環境は以下の通りです。
- macOS Sierra
- Homebrew 1.0.6
- Git 2.10.1
- gpg 2.0.30
いちど公式なガイド通りにやって見て、同じ現象にでくわしたらこの記事のやりかたを試す感じがいいと思います。
セットアップ方法
必要なライブラリをインストール
$ brew install gnupg gpg-agent pinentry-mac
GPG 署名を作成する
$ gpg --gen-key
このコマンドを実行するといくつかの項目の入力を求められます。
ここでは注意すべき項目だけ紹介します。
キーの長さ
GitHub では、4096を推奨していますので、4096と入力してエンターです。
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
メールアドレス等
Real name: miya0001
Email address: miya@exmaple.com
Comment: GitHub
You selected this USER-ID:
"miya0001 (GitHub) <miya@exmaple.com>"
名前、Emailアドレス、コメントの入力が求められます。EmailアドレスはかならずGitHubに登録されているEmailアドレスを入力してください。
その他の項目は任意でいいようです。
パスフレーズの入力を求められますので、これは忘れないようにしましょう。
gitに署名を設定する
まず、以下のコマンドで、署名のリストを取得してください。
$ gpg --list-secret-keys --keyid-format LONG
/Users/miyauchi/.gnupg/secring.gpg
----------------------------------
sec 4096R/XXXXXXXXXXXXXXXX 2016-10-07
uid miya0001 (GitHub) <miya@example.com>
ssb 4096R/1234567890123456 2016-10-07
上の中の XXXXXXXXXXXXXXXX
という部分が署名のIDです。これを以下のコマンドでGitに登録します。
$ git config --global user.signingkey XXXXXXXXXXXXXXXX
あと、gpg
コマンドのパスを以下のコマンドで設定します。
$ git config --global gpg.program $(which gpg)
続けて、以下のコマンドで自動的に署名付きでコミットするように設定してください。
$ git config --global commit.gpgsign true
GitHubに署名の公開鍵を登録
以下のコマンドで公開鍵を取得してください。 XXXXXXXXXXXXXXXX
の部分は署名のIDです。
$ gpg --armor --export XXXXXXXXXXXXXXXX
取得した公開鍵をコピーしてGitHubの以下のURLで登録してください。
gpgの設定
GitHubに書いてあるガイドではここまででなんとかなるみたいな感じだったのですが、最初に書いたようにパスワードを入れてよってエラーが出てしまってうまくいかなかったので、そのための設定を行います。
まず以下の二つのコマンドを連打してください。
$ curl https://gist.githubusercontent.com/bmhatfield/cc21ec0a3a2df963bffa3c1f884b676b/raw/893ab10dc8cd4d6c3cc4ce49bd010a20b54ba4e8/gpg.conf > ~/.gnupg/gpg.conf
$ curl https://gist.githubusercontent.com/bmhatfield/cc21ec0a3a2df963bffa3c1f884b676b/raw/893ab10dc8cd4d6c3cc4ce49bd010a20b54ba4e8/gpg-agent.conf > ~/.gnupg/gpg-agent.conf
次に、 ~/.bash_profile
等に以下のコードを追加してください。
これらのソースは冒頭に紹介した以下のURLにすべてあります。
初コミット
以上が完了したら適当に何かをコミットしてください。すると以下のようなプロンプトが出てパスワードの入力を求められます。
パスワードは、GPG署名を作成するときに入力したパスワードを入力してください。
「Save in Keychain」にチェックを入れると次回以降パスワードの入力を求められなくなります。
コミットしたらGitHubに git push
してみましょう。コミットの履歴に以下のように「Verified」と表示されていたら成功です。
おまけ
ところで、署名付きで一度コミットした後でGitHubに登録した署名の公開鍵を削除したらどうなるのかな?と思って試して見ました。
あっ、なるほど。笑
僕はBotを使って定期的にアップデートしてるプロジェクトもあるんですが、そういうのと区別することもできそうですね。