Mac 上の gpg2: GUI プロンプトが表示される代わりに、ターミナルでパスフレーズを入力するにはどうすればよいでしょうか?

Mac 上の gpg2: GUI プロンプトが表示される代わりに、ターミナルでパスフレーズを入力するにはどうすればよいでしょうか?

私は Mountain Lion を使用していますが、gpg を使用してファイルを暗号化すると、煩わしい GUI がパスフレーズの入力を要求します。外部 GUI ではなく、ターミナルでパスフレーズの入力を要求されるようにしたいと思います。たとえば、リモートでそれを実行する可能性があります。

Mac 用の gpg で、ターミナルでパスフレーズを要求し、GUI プロンプトでは要求しないようにする方法はありますか?


アップデート:これは gpg2 では非常に難しいようなので、gpg1 にダウングレードしました。gpg2 (MacGPG2) ですべて試しましたが、何も機能しませんでした。最悪です! gpg1 では問題なく動作します!

答え1

以下では、MacGPG2 ではなく gnupg2 を macports で使用していることを前提としていますが、この修正はおそらくあなたのユースケースにも当てはまるでしょう。

macports から 'pinentry' パッケージをインストールします。

port -v install pinentry

~/.gnupg/gpg-agent.conf を次のように編集します。

pinentry-program /opt/local/bin/pinentry-curses

既存の「pinentry-program」エントリを削除するかコメントアウトします。ターミナルをリロードするか、以下を使用します。

echo RELOADAGENT | gpg-connect-agent

完了です。これで、pinentry/passphrase がターミナル内 (curses ダイアログ) に表示されるはずです。inline-ttl pinentry の古い gpg v1.x の動作が必要な場合は、macports pinentry パッケージでカスタム './configure' コマンドを使用できる場合があります。

以前に MacGPG2 / GPG ツールを Mac にインストールしたことがある場合は、pinentry ダイアログが機能する前に「shutdown-gpg-agent」プロセスを強制終了する (または再起動する) 必要がある場合があります。

user$ ps ax |grep shutdown-gpg-agent
 1854   ??  S      0:00.01 /bin/bash /usr/local/MacGPG2/libexec/shutdown-gpg-agent

user$ kill -KILL 1854

答え2

ssh環境変数を確認することで、接続を介して来ているかどうかを確認できますSSH_CONNECTION

export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" ]] ;then
    export PINENTRY_USER_DATA="USE_CURSES=1"
fi

次のチェックを使用して、実行が過剰になっているかsshどうかを確認します。tmux

export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" || -n "$TMUX" ]] ;then
    export PINENTRY_USER_DATA="USE_CURSES=1"
fi

ソース

答え3

3 つの言葉: 自分でコンパイルしてください。はい、できます! ただし、最初に gpg-agent.conf ファイルを削除してください。

答え4

GnuPG (バージョン 2.2.9) とそのすべての依存関係を Mac OS High Sierra 用にコンパイルし終えたところです。非常に興味深い作業でした。libgcrypt のテストで小さな問題を解決した後 (Homebrew のそれぞれのレシピを少し使用)、基本的にすべてが問題なく動作しました。

秘密鍵をインポートしようとしましたが、システムに pinentry プログラムがないためインポートできませんでした。簡単に検索してこのページにたどり着きましたが、あまり役に立たなかったので、自分で pinentry をコンパイルすることにしました。

Linux マシンで GnuPG を使用した経験から、煩わしく邪魔なダイアログ ボックスを表示せずに、コマンド ラインの通常のプロンプトにパスワードを入力したいことはすでにわかっていました。そのため、ここでそのプロセスを共有しています。単純なものですが、同様の問題を抱えている人の役に立つかもしれません。

まず、GnuPGからpinentryのソースコードを入手します。Webサイト執筆時点では、ソースをダウンロードするためのリンクはhttps://gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2. ダウンロードもサインgpg 自体を使用して信頼性を確認します。

検証を省略しないでくださいこれは重要! このプログラムはすべての gpg パスワードと秘密鍵にアクセスします。それが主張する通りのものであるか確認したほうがよいでしょう。問題がある場合は、GnuPG のメンテナーから鍵をインポートしたことを確認してください (参照)。ここ):

$ gpg --verify pinentry-1.1.0.tar.bz2.sig pinentry-1.1.0.tar.bz2

本物のソース ファイルで作業していることを確認したら、ソース コードを抽出してcdそのディレクトリに移動します。

$ tar xvf pinentry-1.1.0.tar.bz2
$ cd pinentry-1.1.0

コンパイルは非常に簡単です:

$ ./configure --enable-pinentry-tty
$ make
$ sudo make install

依存関係が不足しているというエラーが表示される場合がありますconfigure。その場合は、エラーを読んで、GnuPG Web ページから依存関係をダウンロードしてください (ダウンロードの整合性を常にチェックしてください)。

上記のコマンドの重要な部分はフラグです--enable-pinentry-tty。 Pinentry TTY は、コマンド ラインの非常に普通で退屈なプロンプトにパスワードを入力する最も簡単な方法です。まさに私が求めていたものです。私が間違っていなければ、バージョンはcursesいずれにせよビルドされます。これは CLI オプションですが、他のオプションと同様に混乱を招くと思います。

インストールが完了すると、 にいくつかの新しいバイナリが表示されます/usr/local/bin。 と呼ばれるバイナリがあることを確認してくださいpinentry-tty(ない場合は、問題が発生しています...)。

新しいバイナリを gpg パスワードを入力するデフォルトの方法にするには、次の行を追加します~/.gnupg/gpg-agent.conf(ファイルとディレクトリがまだ存在しない場合は作成します)。

pinentry-program /usr/local/bin/pinentry-tty

すぐに試してもおそらくうまくいかないでしょう。なぜなら、古い設定で gpg-agent がまだ実行されている可能性が高いからです。先に進み、すべての gpg-agent を終了して、新しい gpg-agent を作成してください。

$ sudo killall gpg-agent
$ gpg-agent --daemon

以上です! 旧式の TTY ピンエントリをお楽しみください :)

関連情報