web-dev-qa-db-ja.com

gpg2ピンエントリはXなしで失敗します

何が機能しているのか

私のgpg-agentpinentryはXで正常に動作します。実行できます

_echo "test" | gpg2 -ase --default-recipient-self | gpg2
_

パスワードをキャッシュし、後で_killall gpg-agent -1_を実行してパスワードをフラッシュします。

デフォルトでは、(見た目から)pinentry-gtkが開き、パスワードの入力を求められます。

機能していないもの

ただし、Xサーバーなしで同じコマンドを実行しようとすると、gpg2がハングしているように見えます(プロンプトなどは表示されません)。それを殺すと、pinentryプロセスも存在し続けますが、どこにも役に立たないことがわかります。

私が期待すること

Xサーバーなしで_gpg2_を実行すると、passと同じように、pinentry-cursesプロンプトが表示されると思います。さらに、古いバージョンのgpgでは、stdinからパスワードの入力を求められただけで、なぜそれが起こらないのかよくわかりません。

私が試したこと

次の「修正」を試しましたが、前述のコマンドが正しく実行されませんでした。実際、pinentry-cursesを強制すると、X環境でも前述のコマンドが失敗します(passは引き続き機能します)。

  • `gpg-agent.conf``に_pinentry-program /usr/bin/pinentry-curses_を設定する

  • このようにgpg-agentを開始します:_gpg-agent --daemon --keep-tty --use-standard-socket --pinentry-program=/usr/bin/pinentry-curses_

  • 環境変数の使用:_export PINENTRY_USER_DATA="USE_CURSES=1”_

背景情報

ほぼ空の.gpg-agent設定ファイルがあります。キャッシュタイムアウトだけがあります。

eval $(gpg-agent --daemon)のようにログイン時に直接gpg-agentを呼び出しています。 Xを起動していないので、gettyを使用してログインします。

1
rexroni

おっと...答えは最初の画面のman gpg-agentにありました。 〜/ .bashrcに次の行を追加する必要がありました。

GPG_TTY=$(tty)
export GPG_TTY

GPG_TTYの値が正しくないため、pinentry-cursesが実行されていた理由が説明されていますが、必要な場所では説明されていません。

注:ttyの出力は、コンソールログインとXサーバーの起動後に変化するため、これはすべての〜/ .bashrcで実行する必要があります(ただし、ほとんどのエクスポートは ' d環境変数は、ログイン時にのみ実行されるように構成されています)。

3
rexroni

Xとttyを頻繁に切り替える場合は、実行することをお勧めします

gpg-connect-agent updatestartuptty /bye > /dev/null

現在の環境に設定するには

0
SultanLegend