コンテンツにスキップ

GitHubに署名コミットする

最終更新日: 2021-06-21

確認環境

Windows

Env Ver
Windows 10 Pro Build 19042.804
git 2.30.0.windows.1
VSCode 1.53.2
Kleopatra Gpg4win-3.1.15

Linux

Windows 側から VSCode の Remote - SSH で接続

Env Ver
Ubuntu Desktop 20.04.2
git 2.25.1
gpg 2.2.19
Kleopatra Gpg4win-3.1.15

手順

Windows

  1. Kleopatora を起動
  2. ファイル> New Pair Key
  3. 個人用の OpenPGP 鍵ペアを生成
    1. 期限なし、パスフレーズは適当に
  4. Export から -----BEGIN PGP PUBLIC KEY BLOCK----- の中身を全部 GitHub の GPG keys/ Add new に貼り付ける
  5. 追加後にでてきた Key IDgit config --global user.signingkey KeyID として cmd に流す
  6. 更に git config --global commit.gpgsign true を流す
  7. 管理者権限で cmd を起動し次のシンボリックリンクを作成
    1. mklink /D %USERPROFILE%\.gnupg %AppData%\GnuPG
  8. gpg-agent を次のコマンドで起動 gpgconf --launch gpg-agent
  9. VSCode で適当なリポジトリを作成
  10. なんか適当にコミットする
  11. GitHub に投げる
  12. GitHub のコミット履歴に verified signature がついてたら成功
  13. スタートアップに gpgconf --launch gpg-agent を入れておく

Linux

  1. Windows 側の Kleopatora から公開鍵と秘密鍵をエクスポートして持ってくる
  2. gpg --import FooBarpublic.asc で公開鍵をインポート
  3. gpg -k でインポートされていることを確認し、下記 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 相当の部分をコピペ
1
2
3
4
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
  1. gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  2. trust
  3. 5 を選ぶ
  4. quit
  5. gpg -k で信用度が [ 究極 ] になっていることを確認
  6. gpg --import FooBarSECRET.asc で秘密鍵をインポート
    1. SSH で繋いでいる時でタイムアウトする場合、GUI プロンプトからの入力になっている可能性があるので、どうにかして入力
    2. XRDP 経由なら pkill gnome-session を叩くと入れる
  7. Windows の時と同様に次のコマンドを流す
    1. git config --global user.signingkey KeyID
    2. git config --global commit.gpgsign true
  8. VSCode で適当なリポジトリを作成
  9. 何か適当にコミットする
    1. コミットがコケたら XRDP から入力する
  10. GitHub に投げる
  11. GitHub のコミット履歴に verified signature がついてたら成功

CLI からどうしてもやりたい場合

  • gpg-agent のセッションが切れる度に生のパスフレーズを打つ羽目になるので微妙
    • gpg-agent が落ちると切れるので OS 再起動とかすると打ち直し
  1. 次のコマンドを流す
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# .profileは必要に応じて変更、zsh なら .zshrc
cat <<'EOF' | tee -a .profile > /dev/null
# GPG TTY
export GPG_TTY=$(tty)
EOF
cat <<EOF > ~/.gnupg/gpg-agent.conf
# cache passphrase for 1 years
allow-preset-passphrase
default-cache-ttl 31536000
max-cache-ttl 31536000
EOF
  1. パスフレーズを記憶させるために echo パスフレーズ | /usr/lib/gnupg/gpg-preset-passphrase --preset XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX を叩く
    1. 毎回手打ちするのであれば不要
    2. 自動化しようとすると生の PW がどこかに眠ることになるので、それはそれで微妙