パスフレーズ収集中に gpg-agent がタイムアウトするのを防ぐにはどうすればよいでしょうか?

パスフレーズ収集中に gpg-agent がタイムアウトするのを防ぐにはどうすればよいでしょうか?

gpg2ローカル ファイルの対称暗号化のために CLI スクリプトでを呼び出しています。CLIgpg-agentのテキスト ベースの UI を介してパスフレーズの入力を求めるプロンプトが表示されるようです。パスフレーズを入力できる状態であれば、すべて正常に動作します。ただし、そうでない場合は、最終的に次のメッセージが表示されて失敗します。

gpg-agent[15338]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of `XXXX.tar' failed: Operation cancelled

このタイムアウトを完全にオフにする方法はありますか?

何かを入力するまで、パスフレーズプロンプトが画面に無期限に表示されるようにしたいです。

答え1

解決策はここに見つかりました:https://dev.gnupg.org/T3240

no-allow-external-cacheこの遅延は、pinentryがGNOMEキーリングを照会することによって発生します。gpg-agent.conf、または を削除しgnome-keyring、現在実行中の gpg-agent を強制終了します。gpgconf --kill gpg-agent

答え2

gpg-agent.conf(参照)gpgエージェント(1)) の場合は、次のオプションを試してください。

pinentry-timeout 0
pinentry-program /usr/bin/pinentry-curses --timeout 0

(ただし、使用する方が多少は良いかもしれませんpinentry-tty。)

答え3

質問:パスフレーズ収集中に gpg-agent がタイムアウトするのを防ぐにはどうすればよいですか?

gpgA: 具体的なケースとしては、セッションでの使用が挙げられますssh。以下の設定により、gpgエージェントセッション内でもssh。特に

  • つかまないカット&ペーストが可能
  • 外部キャッシュを許可しないキーリングを無効にする
  • ピンエントリーの呪いデフォルトではなくターミナルでパスワードを要求しますピンエントリーリモート (ssh の場合) デスクトップ ウィンドウで質問します。
  • 生きる時間ttl(5,6) は 24 時間に設定されています。これにより、たとえば gpg-agent でスクリプトを呼び出す cron を毎日実行するときに、パスワードを再入力する必要がなくなります。
shell> cat ~/.gnupg/gpg-agent.conf
no-grab 
no-allow-external-cache 
pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 86400
max-cache-ttl 86400

答え4

私の場合 (gpg 2.1.11)、pinentry-timeout次のコードをファイルに追加して、オプションを大きな値 (24 時間など) に設定するだけでうまくいきました~/.gnupg/gpg-agent.conf

# time until pinentry closes in seconds
pinentry-timeout 86400

関連情報