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

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

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

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

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

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

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

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
    • RSA
    • ECDSA

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

コミットを検証する

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

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

コミットをローカルで検証するには、Gitの許可された署名者ファイルを作成して、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キーで署名されたコミット

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

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

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