# Git - SSHでコミットに署名

<figure><img src="https://docs.keeper.io/~gitbook/image?url=https%3A%2F%2F762006384-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MJXOXEifAmpyvNVL1to%252Fuploads%252FSo22AInILhJ9X94G8D1x%252Fksm-header-git.png%3Falt%3Dmedia%26token%3Da01381fe-77f0-47b5-8e3f-522da742c8b1&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=f6b477cc&#x26;sv=1" alt=""><figcaption></figcaption></figure>

### 概要 <a href="#about" id="about"></a>

Gitのコミットに署名することは重要です。署名することで、作成者の確認、コミットされた内容の整合性の確保、なりすましの防止、そして否認防止が可能になります。秘密鍵で暗号化署名を使用すると、貢献内容の信頼性とセキュリティへの取り組みが示され、共同作業者間の信頼が構築され、リポジトリが改ざんや悪意のあるコードから保護されます。

この統合により、開発者は Keeperボルト (Keeperシークレットマネージャー経由) で保護された SSHキーを使用してGitコミットに署名できるようになります。

> [**最新のgit-ssh-signバイナリをダウンロードする**](https://github.com/Keeper-Security/git-ssh-sign/releases)

### 特徴 <a href="#features" id="features"></a>

* Keeperボルトに保存されているSSHキーを使用してGitコミットに署名します。
* 安全なDevOpsワークフローのためにディスク上のSSHキーが不要になります。
* Windows、MacOS、Linux で動作します。
* ソースコードは[こちらのGithubページ](https://github.com/Keeper-Security/git-ssh-sign)でご参照いただけます。

### 要件 <a href="#prerequisites" id="prerequisites"></a>

この統合を利用するには、以下が必要となります。

* Keeperシークレットマネージャーへのアクセス (詳細については[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)のページをご参照ください)
  * Keeperアカウントでシークレットマネージャーのアドオンが有効である
  * シークレットマネージャー強制適用ポリシーが有効になっているロールのメンバーシップ
* SSHキーが共有された[Keeperシークレットマネージャーアプリケーション](/keeperpam/jp/secrets-manager/about/terminology.md)
  * アプリケーションの作成手順については、[クイックスタートガイド](/keeperpam/jp/secrets-manager/quick-start-guide.md)をご参照ください。
* 初期化された[Keeperシークレットマネージャー構成](/keeperpam/jp/secrets-manager/about/secrets-manager-configuration.md)
  * この統合ではJSON形式の設定のみが受け入れられます
* Gitのバージョン2.34.0以降がインストールされている

### 設定 <a href="#setup" id="setup"></a>

### 1. シークレットマネージャーの構成 <a href="#id-1.-secrets-manager-configuration" id="id-1.-secrets-manager-configuration"></a>

* Keeperウェブボルトまたはデスクトップアプリにログインします。
* 「Git SSH Keys」などの名前で共有フォルダを作成します。
* 共有フォルダにSSHキー記録を追加します。
* 生成します。

この統合では、Keeperシークレットマネージャーを使用してボルトからSSHキーを取得します。

すべてのシステムで、ユーザーのホーム ディレクトリの`.config/keeper/ssh-sign.json`にシークレットマネージャー構成ファイルを配置しておきます。この構成が見つからない場合は、バックアップとして`ssh-sign.json`がチェックされます。**シークレットマネージャーアプリケーションは、SSHキーが保存されている共有フォルダにアクセスできる必要があります**。

アプリケーションの設定と構成ファイルの取得に関するヘルプについては、[こちらで詳細な手順](/keeperpam/jp/secrets-manager/about/secrets-manager-configuration.md)を参照してください。

### 2. Gitの設定 <a href="#id-2.-git-config" id="id-2.-git-config"></a>

シークレットマネージャーを正常に構成した後、Gitがコミットに自動的に署名するように構成できます。必要に応じてローカルまたはグローバルで実行できます。

構成には次の4つの情報が必要となります。

1. すべてのコミットに署名したいこと
2. デフォルトのGPG署名ではなくSSH署名を使用すること
3. この統合の実行可能ファイルの場所 ([こちらのページからダウンロードしていただけます](https://github.com/Keeper-Security/git-ssh-sign/releases))
4. 署名に使用するSSHキーのUID

以下のコマンドを使用して、ローカルGitリポジトリに対して上記を実行します (グローバルに設定するには`--global`フラグを追加します)。

```sh
git config commit.gpgsign true
git config gpg.format ssh
git config gpg.ssh.program <path to this binary>
git config user.signingkey <SSH Key UID>
```

Git構成には以下の属性が含まれるようになります。

```sh
[commit]
	gpgsign = true
[gpg]
	format = ssh
[user]
	signingKey = <SSH Key UID>
[gpg "ssh"]
	program = path/to/ssh-sign
```

### 3. GitHub / GitLabにキーを追加 <a href="#id-3.-add-keys-to-github-gitlab" id="id-3.-add-keys-to-github-gitlab"></a>

#### **3.1 GitHubのセットアップ**

**GitHub**がコミットの署名に使用された署名を検証するには、SSHキーの公開キーをGitHubアカウントにアップロードする必要があります。その後、GitHubはこの公開キーを使用して署名を検証し、 UIに`verified`タグが表示されます。

公開鍵をアカウントに追加する方法の詳細については、[GitHubの公式ドキュメント](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account?tool=webui\&platform=linux)をご参照ください。

{% hint style="warning" %}
キーの種類を必ず「signing key」 (署名キー) に設定してください。
{% endhint %}

#### **3.2 GitLabのセットアップ**

**GitLab**がコミットの署名に使用された署名を検証するには、SSHキーの公開キーを GitLabアカウントにアップロードする必要があります。その後、GitLab はこの公開キーを使用して署名を検証し、 UI に`verified`タグが表示されます。

公開鍵をアカウントに追加する方法の詳細については、[Gitlabの公式ドキュメント](https://docs.gitlab.com/ee/user/ssh.html#add-an-ssh-key-to-your-gitlab-account)をご参照ください。

{% hint style="warning" %}
キーの種類を必ず「signing key」 (署名キー) か「Authentication and signing」 (認証と署名) に設定してください。
{% endhint %}

### 署名の検証 <a href="#verify-signatures" id="verify-signatures"></a>

Gitは、ターミナルまたはIDEインターフェイスのどちらを使用するかにかかわらず、すべてのコミットに自動的に署名するように設定されています。また、コミット署名に`-S`フラグを使用する必要もなくなりました。

ターミナル内で`git show --pretty=raw`を実行することでコミットが署名されたことを確認できます。

### GitHub と GitLab <a href="#github-and-gitlab" id="github-and-gitlab"></a>

コミットに署名してGitHubまたはGitLabにプッシュすると、Git履歴のコミットの横にVerifiedタグが自動的に表示されます。これ以上の作業は必要ありません。

<figure><img src="https://docs.keeper.io/~gitbook/image?url=https%3A%2F%2F762006384-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MJXOXEifAmpyvNVL1to%252Fuploads%252F9pW1WJbiObPFFTAMVo2o%252Fimage.png%3Falt%3Dmedia%26token%3D32e1a4f1-b7d4-4cc1-8fbf-c54dc18a0a28&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=5e6f0e8d&#x26;sv=1" alt=""><figcaption></figcaption></figure>

### ローカル検証 <a href="#local-verification" id="local-verification"></a>

リポジトリが独自のデータセンターに保存されている場合は、コマンドライン上でコミットをローカルで検証できます。これを行うには、承認された署名キーの記録である`allowed_signers`ファイルを作成する必要があります。

通常、このファイルは`.ssh/allowed_signers`にグローバルに保存されるか、`.git/allowed_signers`のローカルリポジトリに保存されます。このファイルへのパスを`.gitconfig` または`.git/config`ファイルに追加する必要があります。

```
git config gpg.ssh.allowedSignersFile path/to/file
```

`allowed_signers`ファイルの各行は、承認された署名キーのプリンシパルである必要があります。以下のように、公開キーに関連付けられたメールアドレスで始まり、スペースで区切る必要があります。

```
test@example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEQvSrBv28KLAjYO7pD91prhlenrm3hZ4B7DdcB/4/H+
```

> 許可された署名者ファイルの形式については、[こちらのウェブサイト](https://www.man7.org/linux/man-pages/man1/ssh-keygen.1.html)で詳しく説明されています。

複数のメールアドレスを 1 つの公開キーに関連付けることは構文としては間違っていないものの、推奨されておらず、現在はサポートされていません。

`git`履歴を確認するには、以下を行います。

```
# Verify all commits in the repo
git log --show-signature

# Verify the last commit in the repo
git log --show-signature -1
```

### ソース <a href="#source" id="source"></a>

この統合のソースコードはオープンソースであり、[GitHub](https://github.com/Keeper-Security/git-ssh-sign)で入手できます。問題がある場合は、[こちらのGithubページ](https://github.com/Keeper-Security/git-ssh-sign/issues)からチケットを作成してください。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeperpam/jp/secrets-manager/integrations/git-sign-commits-with-ssh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
