SSHキーを使ったコミットへの署名

GPGで署名したコミットと同じように、SSHキーを使ってGitコミットに署名します。SSHキーでコミットに署名すると、GitLabはあなたのGitLabアカウントに関連付けられたSSH公開キーを使ってコミット署名を暗号的に検証します。成功すると、GitLab はコミットにVerifiedというラベルを表示します。

使用タイプが認証と署名である限り、GitLabへのgit+ssh 認証とコミット署名に同じSSHキーを使うことができます。GitLabアカウントにSSHキーを追加するページで確認できます。

GitLabアカウントに関連付けられたSSHキーの管理については、Use SSH keys to communicate with GitLabをご覧ください。

SSHキーでコミットに署名するGitの設定

SSHキーを作成し、GitLabアカウントに追加するかパスワードマネージャを使って生成したら、そのキーを使うようにGitを設定します。

前提条件:

  • Git 2.34.0以降。
  • OpenSSH 8.0 またはそれ以降。

    note
    OpenSSH 8.7 では署名機能が壊れています。OpenSSH 8.7 を使っている場合は、OpenSSH 8.8 にアップグレードしてください。
  • 認証と署名または署名 のいずれかの SSH キー。SSH キーはこれらのタイプのいずれかでなければなりません:

Gitがあなたの鍵を使うように設定するには:

  1. コミット署名にSSHを使うようにGitを設定します:

    git config --global gpg.format ssh
    
  2. どの SSH キーを署名キーとして使うかを指定します。ファイル名 (ここでは~/.ssh/examplekey) を鍵の場所に変更します。鍵の生成方法によってファイル名が異なる場合があります:

    git config --global user.signingkey ~/.ssh/examplekey
    

SSHキーでコミットに署名します。

前提条件:

コミットに署名するには

  1. コミットに署名するには-S フラグを使います:

    git commit -S -m "My commit msg"
    
  2. オプション。コミットのたびに-S フラグを入力したくない場合は、Git に自動的に署名するように指示します:

    git config --global commit.gpgsign true
    
  3. SSH キーが保護されている場合、Git はパスフレーズを入力するよう促します。
  4. GitLab にプッシュします。
  5. コミットが検証されていることを確認しましょう。署名検証ではallowed_signers ファイルを使ってメールと SSH キーを関連付けます。このファイルの設定については、Verify commits locallyを読んでください。

コミットの確認

マージリクエストやプロジェクト全体のコミットをレビューして、署名されていることを確認することができます:

  1. プロジェクトのコミットをレビューするには:
    1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
    2. コード > コミットを選択します。
  2. マージリクエストのコミットをレビューするには
    1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
    2. 左サイドバーで、マージリクエストを選択し、マージリクエストを選択します。
    3. コミットを選択します。
  3. レビューしたいコミットを確認します。署名済みのコミットには、署名の検証状況に応じてVerifiedまたはUnverifiedバッジが表示されます。未署名のコミットにはバッジは表示されません。
  4. コミットの署名の詳細を表示するには、Verified を選択します。GitLabはSSHキーのフィンガープリントを表示します。

ローカルでコミットを検証

コミットをローカルで検証するには、Git 用にallowed signers ファイルを作成して SSH 公開キーとユーザーを関連付けます:

  1. 許可された署名者ファイルを作成します:

    touch allowed_signers
    
  2. Gitでallowed_signers ファイルを設定します:

    git config gpg.ssh.allowedSignersFile "$(pwd)/allowed_signers"
    
  3. 許可する署名者ファイルにあなたのエントリを追加します。このコマンドを使って、あなたのメールアドレスと公開 SSH キーをallowed_signers ファイルに追加します。<MY_KEY> をあなたの鍵の名前に、~/.ssh/allowed_signers をあなたのプロジェクトのallowed_signers ファイルの場所に置き換えてください:

    # Modify this line to meet your needs.
    # Declaring the `git` namespace helps prevent cross-protocol attacks.
    echo "$(git config --get user.email) namespaces=\"git\" $(cat ~/.ssh/<MY_KEY>.pub)" >> ~/.ssh/allowed_signers
    

    その結果、allowed_signers ファイルに、あなたの電子メールアドレス、鍵の種類、鍵の内容が、次のように記述されます:

    example@gitlab.com namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmaTS47vRmsKyLyK1jlIFJn/i8wdGQ3J49LYyIYJ2hv
    
  4. 署名を検証したいユーザーごとに、前の手順を繰り返します。さまざまな貢献者の署名をローカルで検証したい場合は、このファイルを Git リポジトリにチェックインすることを検討しましょう。

  5. コミットの署名ステータスを見るにはgit log --show-signature を使ってください:

    $ git log --show-signature
       
    commit e2406b6cd8ebe146835ceab67ff4a5a116e09154 (HEAD -> main, origin/main, origin/HEAD)
    Good "git" signature for johndoe@example.com with ED25519 key SHA256:Ar44iySGgxic+U6Dph4Z9Rp+KDaix5SFGFawovZLAcc
    Author: John Doe <johndoe@example.com>
    Date:   Tue Nov 29 06:54:15 2022 -0600
       
        SSH signed commit
    

コミットへの署名用の SSH キーを無効にします。

GitLab 15.9 で導入されました

SSHキーが危なくなったら、キーを失効させましょう。鍵を失効させると、将来のコミットも過去のコミットも変更されます:

  • この鍵で署名された過去のコミットは未検証としてマークされます。
  • このキーで署名された将来のコミットは未検証としてマークされます。

SSH キーを無効にするには、次のようにします:

  1. 左のサイドバーで、自分のアバターを選択してください。
  2. プロフィールの編集を選択します。
  3. 左側のサイドバーで、({key})SSH キーを選択します。
  4. 削除したいSSHキーの横にある[Revoke]を選択します。