Gitコマンド入門::Gitカスタマイズ機能(config,SSH keys2)第七十九回

9 min read読了の目安(約8600字

みなさんこんにちは! 前回はSSH接続、証明書を使ってパスワードなしで、git push しました。まあ~ 思えば一番最初にやっておいた方が良かった環境設定かもしれませんけどね。(^▽^;) 何はともあれ便利な機能ですから、みなんもどうぞ! ということで元に戻って、GPG署名付きのコミットを、複数メンバーで実現するための環境設定を、今回からは進めて行きますね!

今回も、こちらのドキュメントの続きです。

https://git-scm.com/book/ja/v2/Git-のさまざまなツール-作業内容への署名#r_signing
7.4 Git のさまざまなツール - 作業内容への署名

前回の記事はこちらから!

https://zenn.dev/shiozumi/articles/9c4a2a2108a8f3

git本家のドキュメントメニューはこちら!

https://git-scm.com/book/ja/v2

アカウントを、2つ用意する。

  1. GitHub のユーザーアカウント
  2. メールアドレス
  3. Linux のユーザーアカウント
- 1st アカウント 2nd アカウント
GitHub shiozumi-esmile shiozumi-makoto
Mail shiozumi@esmile-hd.jp shiozumi@e-smile.ne.jp
Linux shiozumi chi

1st アカウント shiozumi@esmile-hd.jp

2nd アカウント shiozumi@e-smile.ne.jp

GPGの初期化の復習

1st側は、すでに前回作成していると思いますので、次は、2nd側の、Liuxのローカルユーザーアカウント、Chiを追加作成してから、環境設定、GPGコマンドを実行して行きますね。

GPGの環境変数のGPG_TTYを設定

$ export GPG_TTY=$(tty)
// 環境変数の設定

$ vi ~/.bash_profile
// 設定を保存するために、bash_profile にも、viエディターで記述。

$ cat  ~/.bash_profile

if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export GPG_TTY=$(tty)
// GPG_TTYの環境変数の設定を、一番最後の行に追加!

GPGの初期化と、key作成

$ gpg --gen-key	

gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: 鍵リング「/home/chi/.gnupg/secring.gpg」ができました

ご希望の鍵の種類を選択してください:
   (1) RSA と RSA (デフォルト)
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
あなたの選択は? 1

// 1番を選択!

RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 2048
要求された鍵長は2048ビット

// 2048と入力!

鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)0

// 0を選択!

(null)は無期限です
これで正しいですか? (y/N) y

// y を選択!

GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。

本名: Chi Shiozumi
電子メール・アドレス: shiozumi@e-smile.ne.jp
コメント:
次のユーザIDを選択しました:
    "Chi Shiozumi <shiozumi@e-smile.ne.jp>"

// 本名: Chi Shiozumi
// 電子メール・アドレス: shiozumi@e-smile.ne.jp

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O

// O を選択!

秘密鍵を保護するためにパスフレーズがいります。

// パスフレーズは、GitHubのログインパスワードを合わせて置きました
// 同じにする必要はとくにありません。(^▽^;)

たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、
ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に
十分なエントロピーを供給する機会を与えることができます。

gpg: 鍵C0BC3E95を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。

gpg: 信用データベースの検査
gpg: 「ギリギリの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   1  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/C0BC3E95 2021-04-11
   フィンガー・プリント = DDD6 0797 5511 6BD3 A779  3CD1 24A0 A56E C0BC 3E95
uid                  Chi Shiozumi <shiozumi@e-smile.ne.jp>
sub   2048R/45644EB8 2021-04-11

key確認

$ gpg --list-secret-keys --keyid-format LONG
/home/chi/.gnupg/secring.gpg
----------------------------
sec   2048R/24A0A56EC0BC3E95 2021-04-11
uid                          Chi Shiozumi <shiozumi@e-smile.ne.jp>
ssb   2048R/9ED0CF3045644EB8 2021-04-11

keyのエクスポート、GitHubに追加!

$ gpg --armor --export 24A0A56EC0BC3E95

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

mQENBGBzb9IBCADqn0XQN4U7rytENivnBhit2DcC0lswT6lBIYC+tNjGI5msRlEU
ueegwxZt6vOm+AsZ24xljmGPITnuUK9u1992OpRXPL+VqWQero4X4VK+JjoOuVZD
WfoP6PM5K68NuBBhIFaCNz5xPPZXiq2tr+OvdChagmngEfXi+HfWrcLDUmrFEFYj

// 中略

-----END PGP PUBLIC KEY BLOCK-----

// ここまでをコピペして、GitHubに追加!

Git 環境変数の設定

$ git config --global user.signingkey 24A0A56EC0BC3E95
$ git config --global user.name "Chi Shiozumi"
$ git config --global user.email "shiozumi@e-smile.ne.jp"

$ git config --global --list

user.signingkey=24A0A56EC0BC3E95
user.name=Chi Shiozumi
user.email=shiozumi@e-smile.ne.jp

証明書付きのコミットテスト

mkdir func0079 && cd $_

echo "# 20210412 Chi GPG" >> README.md

git init
git add README.md
git commit -S -m "1st"
git branch -M main
git remote add origin https://github.com/shiozumi-makoto/20210412.git
git push -u origin main

// コミットの確認!

git log --show-signature

commit 9564a2cd7b1eedd80ae29375f2840e828d5587a9 (HEAD -> main, origin/main)
gpg: 2021年04月12日 07時21分12秒 JSTに施された署名
gpg:                RSA鍵24A0A56EC0BC3E95を使用
gpg: "Chi Shiozumi <shiozumi@e-smile.ne.jp>"からの正しい署名
Author: Chi Shiozumi <shiozumi@e-smile.ne.jp>
Date:   Mon Apr 12 07:21:05 2021 +0900

    1st

git log --show-signature 2つが同じならOK!

  1. gpg: "Chi Shiozumi shiozumi@e-smile.ne.jp"からの正しい署名
  2. Author: Chi Shiozumi shiozumi@e-smile.ne.jp

gpgとAuthorのメールアドレスが、同じならOKです!

GitHubでの確認!

私の画面では、すでに3つほど、コミットが進んでいます。1st は、9564a2c ハッシュ値が同じになっています。Verified も確認できました!

これで、もうひとつの環境が出来上がりました。次は、1st側から、git pull してみましょう!

git clone 20210412フォルダが作成されます!

$ git clone https://github.com/shiozumi-makoto/20210412.git

$ cd 20210412

$ git log --show-signature 9564a2c
commit 9564a2cd7b1eedd80ae29375f2840e828d5587a9
gpg: 2021年04月12日 07時21分12秒 JSTに施された署名
gpg:                RSA鍵24A0A56EC0BC3E95を使用
gpg: 署名を検査できません: 公開鍵がありません
Author: Chi Shiozumi <shiozumi@e-smile.ne.jp>
Date:   Mon Apr 12 07:21:05 2021 +0900

    1st

署名を検査できません: 公開鍵がありません。

当たり前ですけど、エラーになりますね。(^▽^;)
尚、Linuxのユーザーアカウントも、1st側に切り替えてくださいね!

2nd側の公開鍵のエクスポート!

// まずは、キーの確認!
gpg --list-keys --keyid-format LONG
/home/chi/.gnupg/pubring.gpg
----------------------------
pub   2048R/24A0A56EC0BC3E95 2021-04-11
uid                          Chi Shiozumi <shiozumi@e-smile.ne.jp>
sub   2048R/9ED0CF3045644EB8 2021-04-11

// エクスポート先は、書き込みのアクセス権のある、tmpフォルダーです。
gpg -o /tmp/shiozumi_esmile_ne_jp_key.txt -a --export shiozumi@e-smile.ne.jp

// ファイルの中身を確認!
$ cat /tmp/shiozumi_esmile_ne_jp_key.txt

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

mQENBGBzb9IBCADqn0XQN4U7rytENivnBhit2DcC0lswT6lBIYC+tNjGI5msRlEU
ueegwxZt6vOm+AsZ24xljmGPITnuUK9u1992OpRXPL+VqWQero4X4VK+JjoOuVZD
WfoP6PM5K68NuBBhIFaCNz5xPPZXiq2tr+OvdChagmngEfXi+HfWrcLDUmrFEFYj

// 中略~

-----END PGP PUBLIC KEY BLOCK-----

Linuxのユーザーアカウントは、2nd側に切り替えてから、エクスポートを実行!

1st側から公開鍵をインポート!

Linuxのユーザーアカウントは、1st側に切り替えてから、エクスポートを実行!

gpg --import /tmp/shiozumi_esmile_ne_jp_key.txt

gpg: 鍵C0BC3E95: 公開鍵"Chi Shiozumi <shiozumi@e-smile.ne.jp>"をインポートしました
gpg:         処理数の合計: 1
gpg:           インポート: 1  (RSA: 1)

$ git log --show-signature 9564a2c
commit 9564a2cd7b1eedd80ae29375f2840e828d5587a9
gpg: 2021年04月12日 07時21分12秒 JSTに施された署名
gpg:                RSA鍵24A0A56EC0BC3E95を使用
gpg: "Chi Shiozumi <shiozumi@e-smile.ne.jp>"からの正しい署名
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵のフィンガー・プリント: DDD6 0797 5511 6BD3 A779  3CD1 24A0 A56E C0BC 3E95
Author: Chi Shiozumi <shiozumi@e-smile.ne.jp>
Date:   Mon Apr 12 07:21:05 2021 +0900

    1st

警告: この鍵は信用できる署名で証明されていません!

半歩前進ですね。(^▽^;)

キーの存在を確認してからの、gpg --edit-key

$ gpg --list-keys --keyid-format LONG
/home/shiozumi/.gnupg/pubring.gpg
---------------------------------
pub   2048R/EBC2380DB58F4418 2021-04-08
uid                          Makoto Shiozumi <shiozumi@esmile-hd.jp>
sub   2048R/A154ABB85611F5FB 2021-04-08

pub   2048R/24A0A56EC0BC3E95 2021-04-11
uid                          Chi Shiozumi <shiozumi@e-smile.ne.jp>
sub   2048R/9ED0CF3045644EB8 2021-04-11

ここでは、ハッシュ値を確認します。pub 2048R/24A0A56EC0BC3E95

gpg --edit-key 24A0A56EC0BC3E95

$ gpg --edit-key 24A0A56EC0BC3E95

gpg> trust    ← trust と入力して Enterキーを押します

  1 = 知らない、または何とも言えない
  2 = 信用し ない
  3 = ギリギリ信用する
  4 = 充分に信用する
  5 = 絶対的に信用する
  m = メーン・メニューに戻る

// 5番を選択し、保存して、quit !

git log --show-signature 9564a2c

$ git log --show-signature 9564a2c
commit 9564a2cd7b1eedd80ae29375f2840e828d5587a9
gpg: 2021年04月12日 07時21分12秒 JSTに施された署名
gpg:                RSA鍵24A0A56EC0BC3E95を使用
gpg: 信用データベースの検査
gpg: 「ギリギリの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   3  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 3u
gpg: "Chi Shiozumi <shiozumi@e-smile.ne.jp>"からの正しい署名
Author: Chi Shiozumi <shiozumi@e-smile.ne.jp>
Date:   Mon Apr 12 07:21:05 2021 +0900

    1st

gpg: 信用データベースの検査
gpg: 「ギリギリの信用」3、「全面的信用」1、PGP信用モデル

まとめ

さあ、今回はいかがでしょうか? アカウントを2つ作成すると、ちょっとだけ混乱してきますが、実際に、どう動作するのかは、よく分かると思います。やや、面倒くさいと感じるかもしれませんけど、是非、みなさんもお試しくださいね。

それでは、今回はここまで、お疲れ様でした!

https://zenn.dev/shiozumi/articles/3883553e7030d1
https://twitter.com/esmile2013