Skip to main content

Git へ署名キーを伝える

ローカル環境でコミットに署名するには、使う GPG、SSH、 または X.509 キーがあることを Git に知らせる必要があります。

Git へ GPG キーを伝える

コミッターの ID と、GitHub.com でのアカウントに関連付けられた検証済みのメール アドレスに一致する GPG キーを使っている場合、コミットやタグへの署名を始めることができます。

コミッターアイデンティティにマッチする GPG キーを持っていない場合、既存のキーとメールアドレスを関連付ける必要があります。 詳細については、「メールと GPG キーの関連付け」を参照してください。

複数の GPG キーを持っている場合、どれを使うかを Git に伝える必要があります。

  1. [ターミナル][ターミナル][Git Bash] を開きます。 1. 公開キーと秘密キーの両方がある GPG キーを長い形式で一覧表示するには、gpg --list-secret-keys --keyid-format=long コマンドを使用します。 コミットやタグに署名するには秘密鍵が必要です。

    Shell
    $ gpg --list-secret-keys --keyid-format=long

    注: Linux での一部の GPG インストールには、代わりに既存のキーの一覧を表示するには、gpg2 --list-keys --keyid-format LONG の使用が必要となる場合があります。 この場合、git config --global gpg.program gpg2 を実行して gpg2 を使用するには、Git を構成する必要もあります。

    1. GPGキーのリストから、使いたいGPGキーIDの長い形式をコピーしてください。 この例では、GPG キー ID は `3AA5C34371567BD2` です。 ```shell{:copy} $ gpg --list-secret-keys --keyid-format=long /Users/hubot/.gnupg/secring.gpg ------------------------------------ sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10] uid Hubot ssb 4096R/42B317FD4BA89E7A 2016-03-10 ``` 1. Git でプライマリ GPG 署名キーを設定するには、以下のテキストを貼り付けて、使いたいプライマリ GPG キー ID に置き換えます。 この例では、GPG キー ID は `3AA5C34371567BD2` です。
    $ git config --global user.signingkey 3AA5C34371567BD2
    または、サブキーを設定するときは、`!` サフィックスを含めます。 この例の GPG サブキー ID は `4BB6D45482678BE3` です。
    $ git config --global user.signingkey 4BB6D45482678BE3!
  2. GPG スイートを使用していない場合は、zsh シェルで次のコマンドを実行して、存在する場合は .zshrc ファイル、または .zprofile ファイルに GPG キーを追加します。

    $ if [ -r ~/.zshrc ]; then echo 'export GPG_TTY=$(tty)' >> ~/.zshrc; \
      else echo 'export GPG_TTY=$(tty)' >> ~/.zprofile; fi

    または、bash シェルを使用する場合は、次のコマンドを実行します。

    $ if [ -r ~/.bash_profile ]; then echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile; \
      else echo 'export GPG_TTY=$(tty)' >> ~/.profile; fi
  3. 必要に応じて、PIN またはパスフレーズの入力を求めるメッセージを表示するには、pinentry-mac をインストールします。 たとえば、Homebrew を使用すると、次のようになります。

    $ brew install pinentry-mac
    $ echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
    $ killall gpg-agent

Git へ GPG キーを伝える

コミッターの ID と、GitHub.com でのアカウントに関連付けられた検証済みのメール アドレスに一致する GPG キーを使っている場合、コミットやタグへの署名を始めることができます。

コミッターアイデンティティにマッチする GPG キーを持っていない場合、既存のキーとメールアドレスを関連付ける必要があります。 詳細については、「メールと GPG キーの関連付け」を参照してください。

複数の GPG キーを持っている場合、どれを使うかを Git に伝える必要があります。

  1. [ターミナル][ターミナル][Git Bash] を開きます。 1. 公開キーと秘密キーの両方がある GPG キーを長い形式で一覧表示するには、gpg --list-secret-keys --keyid-format=long コマンドを使用します。 コミットやタグに署名するには秘密鍵が必要です。

    Shell
    $ gpg --list-secret-keys --keyid-format=long

    注: Linux での一部の GPG インストールには、代わりに既存のキーの一覧を表示するには、gpg2 --list-keys --keyid-format LONG の使用が必要となる場合があります。 この場合、git config --global gpg.program gpg2 を実行して gpg2 を使用するには、Git を構成する必要もあります。

    1. GPGキーのリストから、使いたいGPGキーIDの長い形式をコピーしてください。 この例では、GPG キー ID は `3AA5C34371567BD2` です。 ```shell{:copy} $ gpg --list-secret-keys --keyid-format=long /Users/hubot/.gnupg/secring.gpg ------------------------------------ sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10] uid Hubot ssb 4096R/42B317FD4BA89E7A 2016-03-10 ``` 1. Git でプライマリ GPG 署名キーを設定するには、以下のテキストを貼り付けて、使いたいプライマリ GPG キー ID に置き換えます。 この例では、GPG キー ID は `3AA5C34371567BD2` です。
    $ git config --global user.signingkey 3AA5C34371567BD2
    または、サブキーを設定するときは、`!` サフィックスを含めます。 この例の GPG サブキー ID は `4BB6D45482678BE3` です。
    $ git config --global user.signingkey 4BB6D45482678BE3!

Git へ GPG キーを伝える

コミッターの ID と、GitHub.com でのアカウントに関連付けられた検証済みのメール アドレスに一致する GPG キーを使っている場合、コミットやタグへの署名を始めることができます。

コミッターアイデンティティにマッチする GPG キーを持っていない場合、既存のキーとメールアドレスを関連付ける必要があります。 詳細については、「メールと GPG キーの関連付け」を参照してください。

複数の GPG キーを持っている場合、どれを使うかを Git に伝える必要があります。

  1. [ターミナル][ターミナル][Git Bash] を開きます。 1. 公開キーと秘密キーの両方がある GPG キーを長い形式で一覧表示するには、gpg --list-secret-keys --keyid-format=long コマンドを使用します。 コミットやタグに署名するには秘密鍵が必要です。

    Shell
    $ gpg --list-secret-keys --keyid-format=long

    注: Linux での一部の GPG インストールには、代わりに既存のキーの一覧を表示するには、gpg2 --list-keys --keyid-format LONG の使用が必要となる場合があります。 この場合、git config --global gpg.program gpg2 を実行して gpg2 を使用するには、Git を構成する必要もあります。

    1. GPGキーのリストから、使いたいGPGキーIDの長い形式をコピーしてください。 この例では、GPG キー ID は `3AA5C34371567BD2` です。 ```shell{:copy} $ gpg --list-secret-keys --keyid-format=long /Users/hubot/.gnupg/secring.gpg ------------------------------------ sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10] uid Hubot ssb 4096R/42B317FD4BA89E7A 2016-03-10 ``` 1. Git でプライマリ GPG 署名キーを設定するには、以下のテキストを貼り付けて、使いたいプライマリ GPG キー ID に置き換えます。 この例では、GPG キー ID は `3AA5C34371567BD2` です。
    $ git config --global user.signingkey 3AA5C34371567BD2
    または、サブキーを設定するときは、`!` サフィックスを含めます。 この例の GPG サブキー ID は `4BB6D45482678BE3` です。
    $ git config --global user.signingkey 4BB6D45482678BE3!
  2. GPG キーを .bashrc スタートアップ ファイルに追加するには、次のコマンドを実行します。

    $ [ -f ~/.bashrc ] && echo 'export GPG_TTY=$(tty)' >> ~/.bashrc
    

Git に SSH キーについて知らせる

既存の SSH キーを使ってコミットとタグに署名することも、署名専用に新しいキーを生成することもできます。 詳細については、「新しい SSH キーを生成して ssh-agent に追加する」を参照してください。

注: SSH 署名の検証は、Git 2.34 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。

  1. [ターミナル][ターミナル][Git Bash] を開きます。 1. コミットやタグの署名に SSH を使うよう Git を構成します。

    $ git config --global gpg.format ssh
    ``` 1. SSH 公開鍵をクリップボードにコピーします。
    
    SSH 公開鍵のファイル名がサンプルコードと異なる場合は、現在の設定に一致するようにファイル名を変更してください。 キーをコピーする際には、改行や空白を追加しないでください。
    <div class="extended-markdown mac ">
    
    <pre><code class="hljs language-shell">$ pbcopy &lt; ~/.ssh/id_ed25519.pub
    # Copies the contents of the id_ed25519.pub file to your clipboard</code></pre>
    
    <div class="extended-markdown tip border rounded-1 mb-4 p-3 color-border-accent-emphasis color-bg-accent f5">
    
    **ヒント:** `pbcopy` が機能しない場合は、非表示の `.ssh` フォルダーを探し、お気に入りのテキスト エディターでファイルを開き、クリップボードにコピーできます。
    
    </div> </div> <div class="extended-markdown windows ">
    
    <pre><code class="hljs language-shell">$ clip &lt; ~/.ssh/id_ed25519.pub
    # Copies the contents of the id_ed25519.pub file to your clipboard</code></pre>
    
    <div class="extended-markdown tip border rounded-1 mb-4 p-3 color-border-accent-emphasis color-bg-accent f5">
    
    **ヒント:** `clip` が機能しない場合は、非表示の `.ssh` フォルダーを探し、お気に入りのテキスト エディターでファイルを開き、クリップボードにコピーできます。
    
    </div> </div> <div class="extended-markdown linux ">
    
    <pre><code class="hljs language-shell">$ cat ~/.ssh/id_ed25519.pub
    # Then select and copy the contents of the id_ed25519.pub file
    # displayed in the terminal to your clipboard</code></pre>
    
    <div class="extended-markdown tip border rounded-1 mb-4 p-3 color-border-accent-emphasis color-bg-accent f5">
    
    **ヒント:** あるいは、非表示の `.ssh` フォルダーを探し、お気に入りのテキスト エディターでファイルを開き、クリップボードにコピーできます。
    
    </div> </div> 1. Git で SSH 署名キーを設定するには、以下のテキストを貼り付けて、使いたいキーにクリップボードの内容を置き換えます。 キーにはスペースが含まれるため、引用符で囲む必要があります。
    ```bash
    $ git config --global user.signingkey 'ssh-ed25519 AAAAC3(...) user@example.com'
    

Git にX.509 キーについて知らせる

S/MIME を使ってコミットをタグに署名するには、smimesign を使います。

注: S/MIME 署名の検証は、Git 2.19 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。

  1. smimesign をインストールします。
  2. [ターミナル][ターミナル][Git Bash] を開きます。
  3. コミットやタグの署名にS/MIMEを使うようGitを設定してください。 Git 2.19 以降では、git config gpg.x509.programgit config gpg.format コマンドを使用します。
  • すべてのリポジトリへの署名にS/MIMEを使うには以下のようにします。
    $ git config --global gpg.x509.program smimesign
    $ git config --global gpg.format x509
  • 1つのリポジトリへの署名にS/MIMEを使うには以下のようにします。
    $ cd /path/to/my/repository
    $ git config --local gpg.x509.program smimesign
    $ git config --local gpg.format x509
    Git 2.18 以前では、git config gpg.program コマンドを使用します。
  • すべてのリポジトリへの署名にS/MIMEを使うには以下のようにします。
    $ git config --global gpg.program smimesign
  • 1つのリポジトリへの署名にS/MIMEを使うには以下のようにします。
    $ cd /path/to/my/repository
    $ git config --local gpg.program smimesign
    自分のコミッタアイデンティティにマッチにするX.509キーを使っているなら、コミットやタグへの署名を始められます。
  1. コミッター アイデンティティと一致する X.509 キーを使っていない場合は、smimesign --list-keys コマンドを使って証明書と秘密鍵の両方を持っている X.509 キーのリストを表示します。
    $ smimesign --list-keys
  2. X.509キーのリストから、使いたいX.509キーの証明書IDをコピーしてください。 この例では、証明書 ID は 0ff455a2708394633e4bb2f88002e3cd80cbd76f になります。
    $ smimesign --list-keys
                 ID: 0ff455a2708394633e4bb2f88002e3cd80cbd76f
                S/N: a2dfa7e8c9c4d1616f1009c988bb70f
          Algorithm: SHA256-RSA
           Validity: 2017-11-22 00:00:00 +0000 UTC - 2020-11-22 12:00:00 +0000 UTC
             Issuer: CN=DigiCert SHA2 Assured ID CA,OU=www.digicert.com,O=DigiCert Inc,C=US
            Subject: CN=Octocat,O=GitHub\, Inc.,L=San Francisco,ST=California,C=US
             Emails: octocat@github.com
  3. X.509署名キーをGitに設定するには、証明書IDをさきほどコピーしたものに置き換えて以下のテキストを貼り付けてください。
  • すべてのリポジトリへの署名にX.509キーを使うには以下のようにします。
    $ git config --global user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f
  • 1つのリポジトリへの署名にX.509キーを使うには以下のようにします。
    $ cd /path/to/my/repository
    $ git config --local user.signingkey 0ff455a2708394633e4bb2f88002e3cd80cbd76f

関連項目