🏹

Gitコマンド入門::Gitカスタマイズ機能(config,SSH keys4)第八十一回

2021/04/13に公開

みなさんこんにちは! 今回も、前回の続きを進めて行きますね! 尚、タイトルと内容が多少ことなってきていますが、特に気にしないでくださあ~い。(^▽^;) 前回は、8番を実行しつつも、9、10番まで、確認できましたね。ポイントは、両方のアカウントがGitHubに登録されていて、それぞれGitHubにPGP公開鍵を登録しておけば、両者の間の署名付きのコミットは、Verified として、承認済となることでした。今回は、GitHubを持っていないカウントで署名した場合を学習して行きますね。

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

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

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

https://zenn.dev/shiozumi/articles/3883553e7030d1

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

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

ここまでの手順は、こんな感じです。

- 1st アカウント側 2nd アカウント側 補足
1 - PGP証明書作成 gpg --gen-key
2 - git commit -S 署名付きコミット
3 - git push Githubにプッシュ
4 - PGP証明書Export gpg -o <FILE> -a --export <Mail>
5 git clone - git clone <URL>
6 PGP証明書import - gpg --import
7 PGP証明書承認 - gpg --edit-key 5番を選択
8 git push - 1st 側のGithubにプッシュ
9 Verified - 2nd 側のGPG公開鍵を、GitHubサイトが自動補完!
10 Unverified Unverified 2nd 側のPGP公開鍵を削除!

3つめのアカウントを用意する。3rdアカウント!

  1. GitHub のユーザーアカウントは、無し!
  2. メールアドレスは、新規作成
  3. Linux のユーザーアカウントも、新規作成
- 1st アカウント 2nd アカウント 3rd アカウント
GitHub shiozumi-esmile shiozumi-makoto -
Mail shiozumi@esmile-hd.jp shiozumi@e-smile.ne.jp test@esmile-hd.com
Linux shiozumi chi test

test カウントで、前回同様、2nd側のリモートリポジトリから、clone します!

$ git clone https://github.com/shiozumi-makoto/20210412.git
Cloning into '20210412'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 9 (delta 0), reused 9 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.

// フォルダー移動して!
$ cd 20210412

// log 確認
$ git log --show-signature --oneline -1
1b81f9b (HEAD -> main, origin/main, origin/HEAD)
gpg: 2021年04月12日 07時53分37秒 JSTに施された署名
gpg:                RSA鍵24A0A56EC0BC3E95を使用
gpg: 署名を検査できません: 公開鍵がありません
3rd

こちらも前回同様で、公開鍵をインポートします!

gpg --import /tmp/shiozumi_esmile_ne_jp_key.txt
前回のファイルが残っていれば、いきなりインポート実行!

もしも、残っていないなら、2ndアカウントにログインしなおして、エクスポートを実行してから、インポートしてください。
gpg -o /tmp/shiozumi_esmile_ne_jp_key.txt -a --export shiozumi@e-smile.ne.jp

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

gpg --edit-key 24A0A56EC0BC3E95

$ gpg --edit-key 24A0A56EC0BC3E95

gpg> trust // <!-- trust を入力!

他のユーザの鍵を正しく検証するために、このユーザの信用度を決めてください
(パスポートを見せてもらったり、他から得たフィンガー・プリントを検査したり、などなど)

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

あなたの決定は? 5 <!-- 5番を入力

本当にこの鍵を絶対的に信用しますか? (y/N) y

pub  2048R/C0BC3E95  作成: 2021-04-11  有効期限: 無期限      利用法: SC
                     信用: 究極        有効性: 不明の
sub  2048R/45644EB8  作成: 2021-04-11  有効期限: 無期限      利用法: E

gpg> quit  <!-- quit を入力!

git log --show-signature --oneline -1

$ git log --show-signature --oneline
1b81f9b (HEAD -> main, origin/main, origin/HEAD)
gpg: 2021年04月12日 07時53分37秒 JSTに施された署名
gpg:                RSA鍵24A0A56EC0BC3E95を使用
gpg: "Chi Shiozumi <shiozumi@e-smile.ne.jp>"からの正しい署名
3rd

gpg --list-keys --keyid-format LONG 一覧表示!

$ gpg --list-keys --keyid-format LONG
/home/test/.gnupg/pubring.gpg
-----------------------------
pub   2048R/20441C849970DB65 2021-04-08
uid                          Test Shiozumi <test@esmile-hd.com>
sub   2048R/8BB93855E6653190 2021-04-08

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
- 1st アカウント 2nd アカウント 3rd アカウント
Mail shiozumi@esmile-hd.jp shiozumi@e-smile.ne.jp test@esmile-hd.com
pub EBC2380DB58F4418 24A0A56EC0BC3E95 20441C849970DB65

前回同様、git remote rename リネームしてから!

$ git remote rename origin origin_2nd

$ git remote add origin https://github.com/shiozumi-esmile/20210412.git

$ git remote -v
origin  https://github.com/shiozumi-esmile/20210412.git (fetch)
origin  https://github.com/shiozumi-esmile/20210412.git (push)
origin_2nd      https://github.com/shiozumi-makoto/20210412.git (fetch)
origin_2nd      https://github.com/shiozumi-makoto/20210412.git (push)

$ git branch -avv
* main                    1b81f9b [origin_2nd/main] 3rd
  remotes/origin_2nd/HEAD -> origin_2nd/main
  remotes/origin_2nd/main 1b81f9b 3rd

git push -u origin test ローカルmainブランチから、チェックアウトして、test.txt ファイルを追加後、署名付きでコミットして、testブランチをプッシュします!

$ git checkout -b test
Switched to a new branch 'test'

$ git branch -avv
  main                    1b81f9b [origin_2nd/main] 3rd
* test                    1b81f9b 3rd
  remotes/origin_2nd/HEAD -> origin_2nd/main
  remotes/origin_2nd/main 1b81f9b 3rd

// 新しくファイルを追加!
$ echo "test@esmile-hd.com" > test.txt

// add してからの!
$ git add test.txt

// -S 署名付きコミット
$ git commit -S -m "4th"

// log 確認
$ git log --show-signature --oneline -2
e893e74 (HEAD -> test)
gpg: 2021年04月13日 10時20分36秒 JSTに施された署名
gpg:                RSA鍵20441C849970DB65を使用
gpg: "Test Shiozumi <test@esmile-hd.com>"からの正しい署名
4th

1b81f9b (origin_2nd/main, origin_2nd/HEAD, main)
gpg: 2021年04月12日 07時53分37秒 JSTに施された署名
gpg:                RSA鍵24A0A56EC0BC3E95を使用
gpg: "Chi Shiozumi <shiozumi@e-smile.ne.jp>"からの正しい署名
3rd

// testブランチをプッシュ!
$ git push -u origin test
Username for 'https://github.com': shiozumi-esmile
Password for 'https://shiozumi-esmile@github.com':

// 中略~

To https://github.com/shiozumi-esmile/20210412.git
 * [new branch]      test -> test
Branch 'test' set up to track remote branch 'test' from 'origin'.

// ブランチ確認!
$ git branch -avv
  main                    1b81f9b [origin_2nd/main] 3rd
* test                    e893e74 [origin/test] 4th
  remotes/origin/test     e893e74 4th
  remotes/origin_2nd/HEAD -> origin_2nd/main
  remotes/origin_2nd/main 1b81f9b 3rd

それでは、1st側でGithubにログインして確認!

gpg --armor --export 20441C849970DB65

$ gpg --armor --export 20441C849970DB65
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

mQENBGBuT4sBCADIQwjF7kzsUEp9Kt+Z7yDa5RgGJZTGwcPEaBjToi6MU/tJKF2b
yTo3jFAXoWehEPAmim7Lw6CX8NNzHEpM4bedGJfruPJbewcT1buR5wZSx+sAQF4H
wZSy78+JAAS67it6LzxfRJkzluik+qxIsi7a4xR5dGJMGRLnAcx3dmUFJd07Rxnc

// 中略~

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

エクスポートして、GitHubに登録します!

無事、Verified ステータスに変わりましたね!

まとめ

さあ、いかがでしょうか? 前回は、GitHubのアカウントを持っているユーザーで、既にGPG公開鍵を登録している場合でした。今回は、アカウントを持っていないユーザーのケースでしたね。まあ~どちらに統一するのが良いのかは、今のところ経験がありませんので、何ともいませんけど、少なくても、複数ユーザーで署名付きのリポジトリを作成できることだけは、これで問題ないかと思います。SSH接続でのパスワードなし、pushで作業効率UP、GPG署名で信用度UP!

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

https://zenn.dev/shiozumi/articles/ce135827cebf1f
https://twitter.com/esmile2013

Discussion