[GitHub] SSHキーを使用してコミットに署名する

GitHub で SSHキーを使用してコミット署名する手順について記載します。

 

 

 

1. 概要

各人の SSH キーを使用してコミットに署名することができます。下図のように GitHub の Commits 画面で検証結果を確認することが可能です。

 

GitHub コミット署名

 

SSH キーを使用してコミットに署名する主な理由は、コードの信頼性とセキュリティを向上させるためです。この手法を利用することには、次のような利点があります。

  1. 改ざん防止: 署名付きコミットを使用することで、コミットが正規の開発者によって作成されたことを証明できます。これにより、第三者がコードを不正に変更するリスクを軽減します。
  2. 信頼性の向上: SSH キーを使ってコミットに署名すると、受信者がそのコミットの発信者を検証できるようになります。特に、チームでの開発やオープンソースプロジェクトでは、このプロセスは重要です。
  3. セキュリティの強化: SSH キーによる署名付きコミットは、パスワードやトークンよりも安全性が高く、特に機密性の高いプロジェクトに適しています。

 

注意

v2.34 以降の git で本機能を使用することができるようです。

古い git を使用している場合は新しい git へ更新してお試しください。

 

 

2. 既存の SSH キーを確認する

SSH キーがまだあるかどうかわからない場合は、ローカルで既存の SSH キーを確認できます。

既存のSSHキーがあるかどうかを確認するには:

  1. ターミナルで、次のコマンドを使用して、アクセスできるSSHキーを一覧表示します。
    ls -al ~/.ssh
    もしくは .ssh フォルダ中に github フォルダなどを作成して分けて扱っている場合は次のコマンドを使用します。
    ls -al ~/.ssh/github
  2. 出力をチェックして、SSH キー ペアがあるかどうかを確認します。

 

 

3. 新しい SSH キーを生成して追加する

まずはSSHキーを作成します。

すでにSSH認証を使用している場合はこの手順をスキップできます。

ssh-keygen -t ed25519 -C "your_email@example.com"

 

以下を表示したらそのまま Enter キーを押します。

Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):

 

パスフレーズはここではなしで進めます。以下が出てきたらそのまま Enter キーを押します。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

 

これでSSH鍵を作成できました。 Enter file in which to save the key で指定したディレクトリに秘密鍵と公開鍵の2つのファイルが作成されます。

 

 

4. GitHub アカウントに SSH 署名キーを追加する

コミット署名検証用の公開鍵をGitHubに登録します。

下図画面(SSH and GPG keys)を開いて[New SSH key]ボタンをクリックします。

 

New SSH key

 

事前に準備した公開鍵(例:id_ed25519.pub)を登録します。

Title, Key type (Signing Key を選択), Key を登録したら[Add SSH key]ボタンをクリックします。

Add new SSH key

 

 

5. SSH キーでコミットに署名する

SSH キーを使用してコミットに署名するには、ターミナル (CLI) を使用して次の手順に従います。

下記では "--global" を付与して全ての git を対象とする設定を例に記載しています。リポジトリ毎に設定する場合は "--global" を削除して実施します。

  1. キーの形式についてGitに伝えます。
    git config --global gpg.format ssh
  2. コミットの署名に使用するキーを Git に指示します。

    私の場合は ~/.ssh/bitbucket/id_ed25519.pub を公開鍵として使用しているので下記コマンドを使用します。

    git config --global user.signingkey ~/.ssh/bitbucket/id_ed25519.pub
  3. ローカルブランチに変更をコミットする場合は、コマンドのフラグ(-S)を使用します。
    git commit -S -m "your commit message"

    -S を毎回つけるのが面倒な場合は、後述の "5. git commit で常に署名するように設定する" を確認してください。

  4. SSH キーのパスフレーズを入力します。(パスフレーズを登録している場合のみ)
  5. コミットが署名されたことを確認します。(必要に応じて)
    "-1" は最新コミットから1つを表示することを意味します。 "-3" は最新コミットから3つを表示します。
    git log --show-signature -1
    表示例です。
    実行結果例

  6. [任意] ディレクトリにファイル allowedSignersFile をセットアップ
    本設定は、署名されたコミットを検証するために使用します。対象リポジトリへコミットするユーザーの (1)メールアドレス、(2)公開鍵、を allowedSignersFile へ登録します。
    allowedSignersFile は、Git で SSH 署名を使用したコミットやタグの検証を行う際に、信頼できる SSH 公開鍵をリストとして定義するファイルです。
    登録手順例を以下に記載します。bitbucket@example.com および id_ed25519.pub を登録するユーザーのメールアドレス・公開鍵、へ置き換えて登録します。

    echo "bitbucket@example.com $(cat id_ed25519.pub)" > ~/.ssh/allowed_signers
    git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers

    つまり、~/.ssh/allowed_signers に以下の形式で信頼する公開鍵を登録することを意味します。
    「ユーザーのメールアドレス SSH公開鍵」
    例えばこんな感じのファイルです。
    example@domain.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAxxxxxx...
    foo.boo@domain.com ssh-ed25519 ABCDE4NzaC1lZDI112345678xxxxxx...
    そして .gitconfig には allowedSignersFile のパスが記載されます。


  7. 必要に応じて、ssh-agent を再実行することを検討してください。
    ssh-add ~/.ssh/id_ed25519.pub
    eval $(ssh-agent)
  8. 以上を設定後の私の .gitconfig ファイルを紹介します。
    [".gitconfig"]
    kinoshita@PC-FooBoo:~$ cat .gitconfig
    [user]
            name = kinoshita hidetoshi
            email = ********@********.com
            signingkey = /home/kinoshita/.ssh/bitbucket/id_ed25519.pub
    [gpg "ssh"]
            allowedSignersFile = /home/kinoshita/.ssh/allowed_signers
    [gpg]
            format = ssh

    "--global" を付けずに各リポジトリで設定した場合はリポジトリ内の ".git/config" ファイルに同様の情報が記載されます。
    [".git/config"]
    [core]
            省略
    [remote "origin"]
            省略
    [branch "main"]
            省略
    [commit]
            gpgsign = true
    [gpg]
            format = ssh
    [user]
            signingkey = /home/kinoshita/.ssh/bitbucket/id_ed25519.pub

 

 

6. git commit で常に署名するように設定する

git commit 時に “-S“ を付けて実施することは面倒です。一部のツールではこれを補助する仕組みがある様子ですが、常に署名してくれる方が良い場合もありそうです。

署名対象のディレクトリへ移動後、下記コマンドを実行します。

git config commit.gpgsign true

 

もしくは全てを対象に有効化する場合は ‘--global’ を付けて下記コマンドを実行します。

git config --global commit.gpgsign true

 

後者のコマンドを実行後の私の .gitconfig ファイル例です。(メールアドレスは **** で変更表記しています)

gpfsign = true の部分が追加されます。

kinoshita@PC-FooBoo:~$ cat .gitconfig
[user]
        name = kinoshita hidetoshi
        email = ********@********.com
        signingkey = /home/kinoshita/.ssh/bitbucket/id_ed25519.pub
[gpg "ssh"]
        allowedSignersFile = /home/kinoshita/.ssh/allowed_signers
[gpg]
        format = ssh
[commit]
        gpgsign = true

 

以上の設定により git commit に “-S” を付けることなくコミットに対して常に署名するようになります。

 

 

7. 署名検証のステータス

以上の設定と署名付きコミットを行った後、GitHub へプッシュした Commits 画面を紹介します。

下図の通り[Verified]の表示が追加されました。

GitHub コミット署名

 

表 : ステータスと結果
ステータス 結果
Verified コミットが署名され、署名が正常に検証されました
Unverified コミットは署名されていますが、署名を検証できませんでした
No verification status コミットが署名されていません

 

 

ライセンス

本ページの情報は、特記無い限り下記 MIT ライセンスで提供されます。

The MIT License (MIT)

  Copyright 2026 Kinoshita Hidetoshi

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

 

参考

 


 

変更履歴

2026-01-20 - 新規作成

 

Programming Items トップページ

プライバシーポリシー