正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

SSHキーでコミットとタグを署名する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

コミットまたはタグをSSHキーで署名すると、GitLabはGitLabアカウントに関連付けられているSSH公開キーを使用して署名を暗号学的に検証します。成功した場合、GitLabはコミットまたはタグに検証済み ラベルを表示します。

コミットが検証済みとみなされるためのGitLabの条件:

  • コミットの署名に使用したSSHキーは、使用目的認証と署名または署名に設定したうえで、GitLabアカウントに追加する必要があります。
  • Git設定のコミッターメールアドレスは、GitLabアカウントに関連付けられている検証済みのメールアドレスと一致する必要があります。

署名が有効であっても、コミッターのメールがアカウントで検証済みのメールと一致しない場合、コミットは未検証としてマークされます。

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

SSHキーをGitLabアカウントと関連付けて管理する方法の詳細については、GitLabとの通信にSSHキーを使用するを参照してください。

Gitを構成してSSHキーでコミットとタグを署名する

SSHキーを作成し、GitLabアカウントに追加したら、キーの使用を開始するようにGitを設定します。

前提条件:

  • Git 2.34.0以降。

  • OpenSSH 8.1以降。

    OpenSSH 8.7には、壊れた署名機能があります。OpenSSH 8.7を使用している場合は、OpenSSH 8.8にアップグレードしてください。

  • 使用タイプAuthentication & SigningまたはSigningのSSHキー。次のSSHキータイプがサポートされています:

    • ED25519
    • ED25519_SK
    • RSA
    • ECDSA
    • ECDSA_SK

キーを使用するようにGitを設定するには、次の手順に従います:

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

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

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

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キーを関連付けます。このファイルの構成に関するヘルプについては、ローカルでコミットを検証するを参照してください。

タグに署名して検証する

この機能の利用は機能フラグによって制御されます。詳細については、履歴を参照してください。

SSHキーを使用してGitでコミットとタグに署名するように設定したら、タグに署名できます:

  1. Gitタグを作成するときは、-sフラグを追加します:

    git tag -s v1.1.1 -m "My signed tag"
  2. GitLabにプッシュし、このコマンドでタグが署名されていることを確認します:

    git tag --verify v1.1.1
  3. オプション。-sフラグなしでタグを自動的に署名するには、以下を実行します:

    git config --global tag.gpgsign true

コミットを検証する

GitLab UIで、署名されたすべてのタイプのコミットを検証できます。SSHキーで署名されたコミットは、ローカルでも検証できます。

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

ローカルでコミットを検証するには、GitがSSH公開キーをユーザーに関連付けるための許可された署名者ファイルを作成します。この例では~/.ssh/allowed_signersを使用していますが、別のパスを指定できます。以下の手順で同じパスを使用してください。

  1. SSHディレクトリを作成します:

    mkdir -p ~/.ssh
  2. 許可された署名者ファイルを作成します。

    touch ~/.ssh/allowed_signers
  3. Gitがファイルを使用するように構成します:

    git config gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers"
  4. 許可された署名者ファイルにエントリを追加します。<MY_KEY>をキーの名前に置き換えます。ステップ1で別のパスを選択した場合は、~/.ssh/allowed_signersをそのパスに置き換えます:

    # 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

    結果のエントリには、メールアドレス、キータイプ、およびキーのコンテンツが含まれています:

    example@gitlab.com namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmaTS47vRmsKyLyK1jlIFJn/i8wdGQ3J49LYyIYJ2hv
  5. 検証したい追加のユーザーごとにこの手順を繰り返します。他のコントリビューターと共同作業する場合は、このファイルをGitリポジトリにチェックインすることを検討してください。

  6. 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キーで署名されたコミット

コミットの署名に使用したSSHキーを失効または削除できます。詳細については、SSHキーを削除するを参照してください。

SSHキーを削除すると、キーで署名されたコミットに影響を与える可能性があります:

  • SSHキーを失効すると、以前のコミットが未検証としてマークされます。新しいSSHキーを追加するまで、新しいコミットも未検証としてマークされます。
  • SSHキーを削除しても、以前のコミットには影響しません。新しいSSHキーを追加するまで、新しいコミットは未検証としてマークされます。