SSHキーでGitコミットに署名する:最短で「Verified」バッジを取得する方法

Git tutorial - IT technology blog
Git tutorial - IT technology blog

なぜ今すぐコミット署名を始めるべきなのか?

正直に言うと、以前の私はコミット署名(Sign)を避けていました。GitHubでプロフェッショナルに見える緑色の「Verified」バッジには憧れていましたが、GPG(GNU Privacy Guard)を扱うのはかなり面倒な作業だったからです。キーの管理や更新、複数端末間での同期は、まさに「苦行」でした。

しかし、2021年末にリリースされたGit 2.34から状況が一変しました。Gitが正式にSSHキーによるコミット署名をサポートしたのです。SSHキーなら、ほとんどのエンジニアがコードをプッシュするために既に持っています。追加のソフトウェアをインストールする必要も、複雑なGPGコマンドを覚える必要もありません。

Gitにおけるアイデンティティがいかに脆弱かご存知でしょうか? Git Configの「分身」術で紹介したように、git config user.namegit config user.email の2行を実行するだけで、誰でもあなたになりすますことができます。以前、インターン生が悪ふざけでテックリードになりすまし、バグのあるコードをコミットしたことがありました。ログには上司の名前が残っているのにコードの内容が支離滅裂で、チーム全員が犯人探しに午前中を費やす羽目になりました。コミット署名は、そのコードが間違いなくあなたによって書かれたものであるという「真正性(Authenticity)」を保証し、なりすましを防ぎます。

SSHキーによるコミット署名には、主に3つのメリットがあります:

  • 既存の資産を活用: コードのプッシュに使用しているSSHキー(Ed25519など)をそのまま利用できます。
  • 爆速設定: 設定完了まで2分もかかりません。
  • 幅広いサポート: GitHub、GitLab、Bitbucketはすべて、この方法による認証バッジの表示に対応しています。

事前準備

お使いのPCにインストールされているGitのバージョンが 2.34 以上である必要があります。以下のコマンドで確認してください:

git --version

バージョンが古い場合は、すぐにアップデートしましょう。次に、SSHキーペアが必要です。おすすめは Ed25519 アルゴリズムです。高速で、従来のRSAよりも安全です(Ed25519は256ビットですが、RSA 3072ビットと同等の強度があります):

ssh-keygen -t ed25519 -C "[email protected]"

ヒント: キーにはパスフレーズを設定しましょう。万が一PCが他人の手に渡った際の最後の防衛線になります。

コミット署名設定の3ステップ

数行のコマンドを実行して、Gitの署名メカニズムをデフォルトのGPGからSSHに変更します。

ステップ1:署名フォーマットをSSHに変更する

git config --global gpg.format ssh

ステップ2:署名に使用するキーを指定する

Gitに 公開鍵 ファイル(拡張子が .pub のもの)のパスを教えます:

git config --global user.signingkey ~/.ssh/id_ed25519.pub

注意:Windowsの場合、パスは通常 C:/Users/ユーザー名/.ssh/id_ed25519.pub になります。

ステップ3:自動署名を有効にする

コミットのたびに -S フラグを入力するのは面倒です。タグによるバージョン管理も含め、すべてのプロジェクトで自動的に署名されるように設定しましょう:

git config --global commit.gpgsign true
git config --global tag.gpgsign true

GitHub/GitLabでの設定

これが認証バッジを表示させるための重要なステップです。GitHubやGitLabでは、コードのプッシュ用のSSHキーと署名用のSSHキーは別々の項目として管理されています(同じキーを併用することは可能です)。

  1. GitHubの Settings -> SSH and GPG keys にアクセスします。
  2. New SSH Key をクリックします。
  3. Key type の項目で、ここが非常に重要ですが、Signing Key を選択します。
  4. id_ed25519.pub ファイルの内容を貼り付けて保存します。

結果の確認

新しいコミットを作成し(分かりやすいコミットメッセージを心がけましょう)、ローカル環境で署名を確認してみましょう:

git commit -m "SSH署名のテスト"
git log --show-signature -1

Good signature from SSH key... という行が表示されれば成功です。ただし、Gitが allowed_signers に関する警告を出す場合があります。これを完全に解決し、Gitに自分自身を信頼させるには、以下のように設定します:

# 信頼できるキーのリストを保存するファイルを作成
touch ~/.ssh/allowed_signers

# 自分のメールアドレスとキーをファイルに追加
echo "$(git config --get user.email) $(cat ~/.ssh/id_ed25519.pub)" >> ~/.ssh/allowed_signers

# このファイルをGitに登録
git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers

これで、GitHubにプッシュすると、コミットの横に緑色の Verified アイコンが表示されるようになります。これはプロフィールをプロフェッショナルに見せるだけでなく、Git Blameなどでコード履歴を追う際も、ソースコードの正当性を証明する強力な証拠となります。PCを買い替える際は、コミット履歴の一貫性を保つために、このキーペアを忘れずにコピーしておきましょう!

Share: