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

 

Bitbucket Cloud で SSH キーを使用してコミットに署名できるようになりました。

SSH キーを使用してコミットに署名できるようになりました。- アトラシアンのワークライフ

署名付きコミットは、開発者がSSH キーを使用してコントリビューションの信頼性を確認できるようにする、重要な保護レイヤーを提供します。

本ページでは SSH キーを使用した署名付きコミットの設定手順、実際に使用してみた画面などを紹介します。

 

 

 

 

1. 概要

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

 

画面例

 

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

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

 

注意

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

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

 

 

 

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

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

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

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

 

 

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

既にある SSH キーを使用してコミットに署名する場合、次章へ進んでください。

コミットに署名するための新しい SSH キーを生成して追加するには、使用するオペレーティング システムに応じた手順に従います。

 

 

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

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

  1. キーの形式についてGitに伝えます。
    git config --global gpg.format ssh
  2. コミットの署名に使用するキーを Git に指示します。
    これを行うには、以下の例の "~/.ssh/id_rsa.pub" をあなたの公開鍵に置き換えます。
    git config --global user.signingkey ~/.ssh/id_rsa.pub

    私の場合は ~/.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
    表示例です。
    実行結果例

    NOTE:
    ディレクトリにファイルをセットアップする必要があります。詳細については、 Git ドキュメントを参照してください。bitbucket@example.com の部分は Bitbucket アカウントに関連付けられているあなたのメール アドレスへ置き換えて使用してください。以下の例を参照してください。
    echo "bitbucket@example.com $(cat ~/.ssh/id_rsa.pub)" > ~/.ssh/allowed_signers
    git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
  6. 必要に応じて、ssh-agent を再実行することを検討してください。
    ssh-add ~/.ssh/id_rsa.pub
    eval $(ssh-agent)
  7. 以上を設定後の私の .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

 

 

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

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

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

git config commit.gpgsign true

 

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

git config --global commit.gpgsign true

 

後者のコマンドを実行後の私の .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
[commit]
        gpgsign = true

 

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

 

 

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

以上の設定と署名付きコミットを行ったのち、Bitbucket Cloud へプッシュした Commits 画面を紹介します。「✔」 の表示が追加されました。

画面例

 

「✔」 部分をクリックすると以下の表示を確認できました。

画面例

 

表 : ステータスと結果
ステータス 結果
Verified
  • 信頼された作成者がコミットに署名し、署名が検証されました
Unverified
  • コミットには SSH 署名がありますが、メールの不一致により検証が失敗します
  •  コミットの署名に使用されたキーが Bitbucket ユーザー アカウントにアップロードされていません
  •  コミットに署名するためのキーがサポートされていないか、無効です (削除または取り消されています)
No Signature
  • コミットは、署名付きコミットの実装前に作成されました
  •  コミットが署名されていません
  •  コミットは Bitbucket Web インターフェイスを通じて行われています
  •  コミットは merge strategy で行われました。

 

 

ライセンス

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

The MIT License (MIT)

  Copyright 2025 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.

 

 

参考

 


 

変更履歴

2025-03-19 - 新規作成

 

Programming Items トップページ

プライバシーポリシー