
私は 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 ピンエントリをお楽しみください :)