Windows のコマンド ラインには GPG キーが表示されますが、git bash には表示されません。

Windows のコマンド ラインには GPG キーが表示されますが、git bash には表示されません。

私はWindows 10システムにGPG4WinとKleopatraをインストールし、別のマシンで作成した公開鍵と秘密鍵のファイルをインポートしました。私の目標は、これらの鍵を使用してGithubのコミットに署名することです(これは以前に古いマシンから行いました)。鍵をインポートした後、Windows コマンドラインまたは Powershell、キーが表示されます:

C:\Users\michael>gpg --list-keys
C:\Users\michael\AppData\Roaming\gnupg\pubring.kbx
---------------------------------------------
pub   rsa4096 2020-01-14 [SC]
      <snipped the fingerprint>
uid           [ultimate] Michael (Github) <[email protected]>
sub   rsa4096 2020-01-14 [E]

ただし、git bash でこれらのコマンドを実行すると (最初のコマンドの後に git bash を再起動)、何も表示されません。

$ git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
$ gpg --list-secret-keys
$ gpg --list-keys

なぜ Windows のコマンド ラインにはキーが表示されるのに、git bash には表示されないのでしょうか (GPG プログラムを正しく設定した後でも)? 私の推測では、これはまだパスに関係していると思いますが、グローバル git 設定を設定すれば修正されると思いました。

答え1

私も同じ問題を抱えていました。私の場合、問題は、インストールした GPG4WIN のバージョンが、デフォルトの home/.gnupg フォルダ以外の場所を「実際の」kbx を探すことを何らかの方法で認識していたことです。CMDgpg --versionと Rstudio/Git bash を呼び出すと、このことがわかります。保証免責事項の後の最初の行を見てください。これは「Home」で始まります。git バージョンがデフォルトになります。CMD バージョン (キーが表示されます) は次のようになりますC:\Users\USERNAME\AppData\Roaming\gnupg。実行できるのは、環境変数 を作成することです。GNUPGホームそして、それを実際のホームの場所に設定します。これにより、他の設定が上書きされ、次に bash 内から gpg を呼び出すときに、キーが見つかるようになります。

答え2

@avraham 提案は、GPG に GPG4WIN ディレクトリの使用を強制するのに役立ちましたが、git 自体は、そこに保存されている独自の gpg バイナリをまだ使用していたため、GPG4WIN GPG リポジトリを読み取ることができませんでした。

git bash に GPGWIN のバージョンを使用させるには、.bash_profile を使用して PATH 変数を書き換え、フォルダーの検索順序を優先して、GPG4WIN フォルダーが最初に検索されるようにする必要がありました。(デフォルトでは、git bash は gpg のバージョンで C:\Program Files\Git\usr\bin\gpg.exe を使用します。これは、フォルダーがパス構成で上位にあるためです。)

パス変数を書き換える前は、Windows の環境変数から継承されたパスの前に、git 独自のパスがリストされていました。

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

ホームディレクトリに次の .bash_profile ファイルを書き込んだ後:

$ cat .bash_profile
# Custom configuration file to force GIT bash to use GPG from GPG4WIN
export PATH=/c/PROGRA~2/GnuPG/bin:/c/Users/ez/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin

注: bash による解釈の問題を回避するために、「Program Files (x86)」の短縮名を使用しています。

この後、.bash_profile をソースし、最後に git bash はコマンドラインから GPG4WIN バージョンの gpg を使用しました。これが機能したことを確認するには、where gpg再度実行します。

$ where gpg
C:\Program Files (x86)\GnuPG\bin\gpg.exe
C:\Program Files\Git\usr\bin\gpg.exe

答え3

私の場合、インストールするとGit Bashパスに gpg もインストールされC:\Program Files\Git\usr\bin\gpg.exe、GPG4Win と Kleopatra もインストールされます。

Bashでは、where gpg両方のパスを取得するために実行しますC:\Program Files\Git\usr\bin\gpg.exe C:\Program Files (x86)\GnuPG\bin\gpg.exe

CMDで、実行してwhere gpg取得しますC:\Program Files (x86)\GnuPG\bin\gpg.exe

PowerShellでは、 を実行して(get-command gpg.exe).Path取得します。C:\Program Files (x86)\Gpg4win\..\GnuPG\bin\gpg.exe

関連情報