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を設定するには、次の手順に従います:
コミット署名にSSHを使用するようにGitを設定します:
git config --global gpg.format ssh署名キーとして使用する公開SSHキーを指定し、ファイル名(
~/.ssh/examplekey.pub)をキーの場所に変更します。ファイル名は、キーの生成方法によって異なる場合があります:git config --global user.signingkey ~/.ssh/examplekey.pub
SSHキーでコミットに署名する
前提要件:
- SSHキーを作成しました。
- GitLabアカウントにキーを追加しました。
- SSHキーを使用してコミットに署名するようにGitを設定しました。
コミットに署名するには、次の手順に従います:
コミットに署名するときは、
-Sフラグを使用します:git commit -S -m "My commit msg"オプション。コミットするたびに
-Sフラグを入力したくない場合は、次のようにコミットに自動的に署名するようにGitに指示します:git config --global commit.gpgsign trueSSHキーが保護されている場合、Gitはパスフレーズの入力を求めます。
GitLabにプッシュします。
コミットが検証されていることを確認します。署名の検証では、
allowed_signersファイルを使用してメールとSSHキーを関連付けます。このファイルの設定については、コミットをローカルで検証するを参照してください。
コミットを検証する
GitLab UIで、署名されたすべてのタイプのコミットを検証できます。SSHキーで署名されたコミットは、ローカルでも検証できます。
コミットをローカルで検証する
コミットをローカルで検証するには、Gitの許可された署名者ファイルを作成して、SSH公開キーをユーザーに関連付けます:
次のように許可された署名者ファイルを作成します:
touch allowed_signers次のようにGitで
allowed_signersファイルを設定します:git config gpg.ssh.allowedSignersFile "$(pwd)/allowed_signers"許可された署名者ファイルにエントリを追加します。このコマンドを使用して、メールアドレスと公開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_signersallowed_signersファイルの結果のエントリには、次のように、メールアドレス、キータイプ、およびキーの内容が含まれています:example@gitlab.com namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmaTS47vRmsKyLyK1jlIFJn/i8wdGQ3J49LYyIYJ2hv署名を検証する各ユーザーに対して、前の手順を繰り返します。多くの異なるコントリビューターの署名をローカルで検証する場合は、このファイルをGitリポジトリにチェックインすることを検討してください。
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キーを追加するまで、新しいコミットは未検証としてマークされます。