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 またはそれ以降。
OpenSSH 8.7 では署名機能が壊れています。OpenSSH 8.7 を使っている場合は、OpenSSH 8.8 にアップグレードしてください。 - 認証と署名または署名 のいずれかの SSH キー。SSH キーはこれらのタイプのいずれかでなければなりません:
Gitがあなたの鍵を使うように設定するには:
-
コミット署名にSSHを使うようにGitを設定します:
git config --global gpg.format ssh
-
どの SSH キーを署名キーとして使うかを指定します。ファイル名 (ここでは
~/.ssh/examplekey
) を鍵の場所に変更します。鍵の生成方法によってファイル名が異なる場合があります:git config --global user.signingkey ~/.ssh/examplekey
SSHキーでコミットに署名します。
前提条件:
- SSHキーを作成していること。
- GitLab アカウントにキーを追加しました。
- SSHキーでコミットに署名するようにGitを設定しました。
コミットに署名するには
-
コミットに署名するには
-S
フラグを使います:git commit -S -m "My commit msg"
-
オプション。コミットのたびに
-S
フラグを入力したくない場合は、Git に自動的に署名するように指示します:git config --global commit.gpgsign true
- SSH キーが保護されている場合、Git はパスフレーズを入力するよう促します。
- GitLab にプッシュします。
- コミットが検証されていることを確認しましょう。署名検証では
allowed_signers
ファイルを使ってメールと SSH キーを関連付けます。このファイルの設定については、Verify commits locallyを読んでください。
コミットの確認
マージリクエストやプロジェクト全体のコミットをレビューして、署名されていることを確認することができます:
- プロジェクトのコミットをレビューするには:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- コード > コミットを選択します。
- マージリクエストのコミットをレビューするには
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 左サイドバーで、マージリクエストを選択し、マージリクエストを選択します。
- コミットを選択します。
- レビューしたいコミットを確認します。署名済みのコミットには、署名の検証状況に応じてVerifiedまたはUnverifiedバッジが表示されます。未署名のコミットにはバッジは表示されません。
- コミットの署名の詳細を表示するには、Verified を選択します。GitLabはSSHキーのフィンガープリントを表示します。
ローカルでコミットを検証
コミットをローカルで検証するには、Git 用にallowed signers ファイルを作成して 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_signers
その結果、
allowed_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 キーを無効にします。
GitLab 15.9 で導入されました。
SSHキーが危なくなったら、キーを失効させましょう。鍵を失効させると、将来のコミットも過去のコミットも変更されます:
- この鍵で署名された過去のコミットは未検証としてマークされます。
- このキーで署名された将来のコミットは未検証としてマークされます。
SSH キーを無効にするには、次のようにします:
- 左のサイドバーで、自分のアバターを選択してください。
- プロフィールの編集を選択します。
- 左側のサイドバーで、({key})SSH キーを選択します。
- 削除したいSSHキーの横にある[Revoke]を選択します。