Gitコミットに署名を付与して「本人性」を証明する手段として、古くからGPG(GNU Privacy Guard)鍵が使用されてきました。しかし、GPGの導入は鍵の生成や有効期限の管理、エージェントの設定など、開発者にとって少なからず学習コストのかかる作業でした。
この課題を解決するため、Git 2.34(2021年リリース)から常用しているSSHキー(公開鍵)をそのままコミット署名に利用できる機能が追加されました。
本記事では、GPGキー作成の手間を完全に省略し、手持ちのSSHキーを利用してGitコミット署名を爆速でセットアップする実用手順を解説します。
1. なぜGPGの代わりにSSHキーなのか?
- 二重管理の不要: すでにGitHubへの認証(プッシュ操作)用としてPC内に存在するSSHキーをそのまま流用できるため、新しくGPG鍵を生成してパスフレーズを管理する必要がありません。
- シンプルな設定: コマンド数ステップで署名を有効化できます。
- 優れたポータビリティ:
id_ed25519などの現代的なSSH公開鍵ペアは軽量で扱いやすいです。
2. SSHキーによる署名の詳細設定手順
ステップ1: 署名形式をSSHに指定する
Gitのグローバル設定に対して、コミット署名のプログラム形式を ssh に指定します。
git config --global gpg.format ssh
ステップ2: 署名に使用する公開鍵を指定する
お使いのPC内にあるSSH公開鍵のパスを指定します。一般的には ~/.ssh/id_ed25519.pub や ~/.ssh/id_rsa.pub になります。
git config --global user.signingkey ~/.ssh/id_ed25519.pub
ステップ3: コミット時の自動署名を有効化する
毎回 -S フラグを付けなくても自動的に署名されるように設定します。
git config --global commit.gpgsign true
3. ローカルで他の開発者のSSH署名を検証する設定
自分がプッシュしたコミットがGitHub上で「Verified」になるだけであれば上記の設定で十分ですが、ローカル環境の git log --show-signature で他のチームメンバーがSSH署名したコミットを「信頼できる署名」として検証したい場合、allowed_signers ファイルの設定が必要になります。
ステップ1: allowed_signers ファイルを作成する
信頼するメンバーのメールアドレスとSSH公開鍵のリストを記述するファイルを作成します。
touch ~/.config/git/allowed_signers
ステップ2: ファイルに公開鍵情報を記述する
ファイルの中に以下の形式でメンバー情報を記述します。
# <メールアドレス> namespaces="git" <SSH公開鍵>
[email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1...
[email protected] namespaces="git" ssh-ed25519 AAAAC3NzaC1...
ステップ3: Gitにファイルのパスを教える
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
これで、ローカルでもチームメンバーの署名が「正しいもの」として強固に検証できるようになります。
まとめ
SSHキーを使ったGitコミット署名は、現代のWeb開発において最も導入コストの低いセキュリティ向上策の一つです。
gpg.format sshを指定するだけでSSH鍵での署名が有効になる- GitHubへの登録時、Key typeを「Signing Key」として登録することを忘れない
allowedSignersFileを設定すれば、チーム内でのローカル相互検証も可能
セキュリティを一段引き上げるために、ぜひ今すぐセットアップしてみてください。
