スクリプト内でgpgファイルの復号化を試みます。端末で実行すると、gpg -d file.gpg
呪いダイアログボックスにパスワードを入力するように求められます。ただし、その行を含むスクリプトを実行すると、「gpg:decryption failed:No key」というメッセージが表示された場合、または対話型端末で実行されないと自動的に失敗します。
理想的には、ターミナルウィンドウでRunを実行するときですpinentry-curses
。
qtまたはgtkを使用してpinentryプログラムを実行するように設定すると、ソースに関係なく毎回グラフィックウィンドウが表示されます。これが私が複製したい動作です。私はこれがqtやgtkに依存したくありません。
答え1
gpg2 を仮定すると、セキュリティなどに対するいかなる主張もしないことに注意しながら、いくつかのソリューションを提供できます。
パスワード入力用の端末をあらかじめ生成してください。ここに 2 つのコマンドを入力します。
tty
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon sleep 999999
たとえば、これは使用中のptyを印刷して/dev/pts/10
からgpgエージェントを実行します。 gpgエージェントは、sleep
この端末でこれ以上読み取らないように「中断」されます。
他のシェルで何かを復号化する必要がある場合は、まず次のように環境を設定してください。
export GPG_TTY=/dev/pts/10
export GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
ここで、1000はユーザーIDです。 (gpg-agent
オプションから始めて、このソケットの名前を取得できます-v
。よりきれいな方法で取得できると確信しています。)
:0:1
メッセージの最後に追加された内容は実際にプロキシのpidバージョンとプロトコルバージョンである必要がありますが、0が許可されているようです。 (ソケットが上記のパス名にない場合は、そのソケットを使用しないか、gpg2
構成ファイルにいくつかのオプションが設定されている可能性があります。)
あなた今しなければならない--use-agent
コマンドを復号化するオプションを追加します gpg
。これにより、pinentryプログラムのcursesバージョンが事前に生成された端末に表示され、パスワードを入力できるようになります。