更新日:
投稿日:

確認環境

Env Ver
Ubuntu 20.04.4 LTS
gpg 2.2.19

手順

  1. gpg -kで削除したいキーの下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
  1. gpg --delete-secret-keys XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXで秘密鍵を消す
  2. gpg --delete-keys XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXで公開鍵を消す
  3. gpg -kで削除出来ているか確認
更新日:
投稿日:

VisualStudio 2022でGitの署名コミットをしようとしたらエラーを吐いたのでその対処法

前提条件

  • Gpg4winをインストールしている
  • cmdから署名コミットができる
  • 最低限以下の設定がある
[user]
	name = your-name
	email = your@example.com
	signingkey = XXXXXXXXXXXXX
[commit]
	gpgsign = true

確認環境

下記のgpgはGpg4winにバンドルされているものです

Env Ver
Visual Studio Community 2022 (64 bit) Version 17.5.1
Git 2.40.0.windows.1
gpg 2.3.4

エラー内容

このエラーをコピーしようとするとVisualStudioがクラッシュしたので頑張って写経しました

Git failed with a fatal error.
Git failed with a fatal error.
hint: core.useBuiltinFSMonitor=true is deprecated; please set core.fsmonitor=ture instead
hint: Disable this message with "git config advice.useBuiltinFSMonitorConfig false"
error: cannot spawn gpg: No such file or directory
error: gpg failed wqrite commit object

対処方法

GitのGlobal Config設定変更で対処する

  1. 次のコマンドを流す
    1. git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
    2. gpg.exeのパスは環境に応じて書き換えること

参考までにWindowsのGlobal Configは%USERPROFILE%.gitconfigにあるのでファイルを編集して対応する場合は、下記内容を追記することで対応できる

[gpg]
	program = "C:\\Program Files (x86)\\GnuPG\\bin\\gpg.exe"
更新日:
投稿日:

毎回パスワードを聞かれるのは面倒なのでkeychainを使って記憶させる。

確認環境

WSL2

Env Ver
keychain 2.8.5
Ubuntu 20.04.5 LTS

実機

Env Ver
keychain 2.8.5
Ubuntu 24.04.3 LTS

手順

1. keychainのインストール

sudo apt install keychain

2. keychainの設定

.zshrcに次の行を追加。

keychain -q --nogui --agents ssh,gpg --quick <SSH秘密鍵のパス> <GPG鍵のkeyid>

GPG鍵のkeyidは以下で取得可能。

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

3. エージェント連携をシェル設定に書く

~/.keychain配下にホスト名でHOGE-shのようなファイルができているので、これを.zshrcから読み込む。内容的にはssh-agentとkeychainが疎通するための環境設定と思われる。

具体的には以下の内容を.zshrcに追記すればよい。

source $HOME/.keychain/`hostname`-sh

最終的な.zshrcの状態としては以下のようになっていればよい。

keychain -q --nogui --agents ssh,gpg --quick <SSH秘密鍵のパス> <GPG鍵のkeyid>

source $HOME/.keychain/`hostname`-sh

hostname-sh-gpgみたいなファイルも出来ているが私の環境ではこれを読み込むと上手く動かなかったので、このファイルは指定しないほうが良さそうに見えた。

トラブルシュート

GPGのキーが見つからないエラーが出る

  • Warning: can't find DEADBEEF; skipping

上記が出た場合
~/.gnupg/gpg.confに対して以下の記述をすることで改善する可能性がある(この対策は不完全かもしれない

keyid-format LONG

GPGキーのパスフレーズのプロンプトがGUI側に出る

.zshrcに以下を追記するとCUI側に出るようになる。

export GPG_TTY=$(tty)

更新履歴

  • 2026-01-21: エージェントとの連携設定が漏れていたのを追記
  • 2026-01-19: Ubuntu実機で確認したので、その結果を記事に反映し、記事を読みやすく改良
更新日:
投稿日:

使い方の簡単な参考

確認環境

Windowsで確認しているが、 Linuxでも多分同じ

Env Ver
gpg (GnuPG) 2.2.27

基本の使い方

  • 鍵の一覧を確認する
    • gpg --list-keys
    • --with-keygripをつけるとKeyGrip(鍵の識別子?)も見れる
  • 鍵を編集する
    • gpg --edit-key <Name>
    • <Name>は鍵の名前か鍵IDを指定できる
    • --expertをつけると高度な編集が可能になる
    • 対話シェルが起動するのでhelpを叩いてやりたい操作をする
    • 副鍵に対する操作は事前にkey <ID>を指定する必要がある
      • 無指定でdelkeyとかするとエラーになる
  • 鍵をインポートする
    • gpg --import <key-file>

確認環境

Windows

あらかじめgpgのパスをPATHに通しておくと良い
参考値:C:\Program Files (x86)\GnuPG\bin

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

手順

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. 以下を流す(gpg.program はなくても動くが、あったほうが問題が起きない)
    ```bat
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
    ```
  7. 管理者権限で cmd を起動し次のシンボリックリンクを作成
    1. mklink /D %USERPROFILE%.gnupg %AppData%\GnuPG
  8. VSCodeで適当なリポジトリを作成
  9. なんか適当にコミットする
  10. GitHubに投げる
  11. GitHubのコミット履歴にverified signatureがついてたら成功

Linux

  1. Windows側のKleopatoraから公開鍵と秘密鍵をエクスポートして持ってくる
  2. gpg --import FooBarpublic.asc で公開鍵をインポート
  3. gpg -k でインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX相当の部分をコピペ
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からやる場合でパスフレーズを何度も打ちたくないケース

以下の手順が参考になる

WSL2のUbuntuでGPGキーのパスフレーズを記憶させる

トラブルシュート

Key IDを確認したい

以下のコマンドで確認可能

gpg --list-signatures

GPGキーを消したい

GPGキーの消し方