以下の内容はhttps://k1low.hatenablog.com/entry/2025/05/07/083000より取得しました。


GitのコミットにGPG鍵で署名して、パスフレーズを1日に1回1Password CLI経由で入力する

主に自分用メモです。

前提

  • 1Passwordを使用していること
  • 1Password CLI (op) は設定済み

GitのコミットにGPG鍵で署名できるようにする

まずはコミットに全てGPG鍵で署名できるようにします。

インストール

gpgをインストールする

$ brew install gpg

GPG鍵の生成

GPG鍵を生成します。GitHubにGPG公開鍵を登録する場合はメールアドレスはGitHubで使用しているものにします。

$ gpg --full-generate-key

パスフレーズは1Passwordに登録しておきます(今回は GPG Passphrase という名前で登録しました)。

生成したGPG鍵を確認します。

$ gpg --list-secret-keys --keyid-format=long --with-keygrip
[keyboxd]
---------
sec   ed25519/0BDFB4ABAD9F9016 2025-05-03 [SC] [expires: 2026-05-03]
      3596D05DC0F13FE5810AC1650BDFB4ABAD9F9016
      Keygrip = 091937796BDCEEFB9E83ACEB34B3C979A673F0E8
uid                 [ultimate] k1LoW <k1lowxb@gmail.com>
ssb   cv25519/E251E71C36550FA0 2025-05-03 [E] [expires: 2026-05-03]
      Keygrip = ED10131ED9958573A3F5AC16415EFEB5C87A70AF

$

Key ID 0BDFB4ABAD9F9016ed25519/0BDFB4ABAD9F9016 の後半 )とKeygrip 091937796BDCEEFB9E83ACEB34B3C979A673F0E8 を後で使用します。

Gitの署名の設定とコミット時の自動署名

生成したGPG鍵でコミット時に自動で署名するようにします

$ git config --global user.signingkey 0BDFB4ABAD9F9016 # Key ID でGPG鍵を指定
$ git config --global commit.gpgsign true # コミット時に自動で署名する

パスフレーズの入力を1Password経由にする

gpg-preset-passphrase の設定をする

gpg-preset-passphrase を使ってパスフレーズの入力を1日(86400秒)に1回にします。パスフレーズのキャッシュですね。

$ cat << EOF >> ~/.gnupg/gpg-agent.conf
allow-preset-passphrase
default-cache-ttl 86400
max-cache-ttl 86400
EOF
$ gpg-connect-agent reloadagent /bye # gpg-agentのリロード

1Passwordから秘密参照をコピーする

1Passwordからパスフレーズの秘密参照をコピーします。 op://Vault/Name/field みたいなやつです。

1Password CLI経由でパスフレーズの入力をする関数を作成する

Keygrip( 091937796BDCEEFB9E83ACEB34B3C979A673F0E8 )と秘密参照( op://Personal/GPG passphrase/password )を使って1Password CLI経由でパスフレーズの入力をする関数を作成します

function preset_git_sign_passphrase () {
        gpg-connect-agent /bye &> /dev/null
        eval $(op signin)
env GPG_PASSPHRASE="op://Personal/GPG passphrase/password" op run --no-masking -- printenv GPG_PASSPHRASE | /opt/homebrew/opt/gnupg/libexec/gpg-preset-passphrase --preset 091937796BDCEEFB9E83ACEB34B3C979A673F0E8
}

これを .zshrc などに登録しておいて preset_git_sign_passphrase を実行することで1日パスフレーズをキャッシュします。

おまけ: GitHubへGPG公開鍵の登録

Key IDを指定してexportした公開鍵をGitHubに登録すれば、GitHub側でコミットの署名検証をしてくれます(コミットログに Verified のアレ)。

$gpg --armor --export 0BDFB4ABAD9F9016
-----BEGIN PGP PUBLIC KEY BLOCK-----

[...]

参考

Using 1password, GPG and git for seamless commits signing - Baptiste Maingret’s Homepage




以上の内容はhttps://k1low.hatenablog.com/entry/2025/05/07/083000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14