猫$HOME/.gnupg/gpg-agent.conf

猫$HOME/.gnupg/gpg-agent.conf

Ubuntu 22.04.1 LTS

再起動後に操作を実行すると、git push REMOTE数秒後にダイアログボックスが表示されます。

+---------------------------------------------------------------+
| Please enter the passphrase to unlock the OpenPGP secret key: |
| "user"                                                        |
| 3072-bit RSA key, ID FF3B0094D97228,                          |
| created 2023-09-22 (main key ID 9BD967C9E4EC49).              |
|                                                               |
|                                                               |
| Passphrase: _________________________________________________ |
|                                                               |
|         <OK>                                   <Cancel>       |
+---------------------------------------------------------------+

手動で入力する必要がないようにスクリプトを介してこのパスワードを自動化するにはどうすればよいですか?

私はこれを試しましたが、うまくいきません。

git push REMOTE 
sleep 10  # Waits 10 seconds.
KEY

ありがとうございます!

答え1

まず、「予想」方法は安全ではありません。 gpg-agentを使用することをお勧めします。

gpgを使用している場合は、ファイルの復号化/暗号化を試みるときにgpg-agentを実行する必要があります。 (git pushのときに何をしたいのかわかりませんが、gpgファイルを使用しているようです。)

編集する~/.gnupg/gpg-agent.conf

日中の値は次のとおりです。

default-cache-ttl 86400
max-cache-ttl 86400

これにより、1日に1回だけキーを入力することができます(または最初に押すときでも問題ありません)。

源泉: https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session

完全性のために、ブートセッションにファイルの復号化、gpg show、または同様の機能を入れてキーを1回だけ入力し、残りの日にgpgエージェントを有効にすることもできます。

答え2

これはgpgキーの初期パスワードをキャッシュする方法です。自動化目的に合わせて調整できます。試してみましたが結果expectgpg-agentありません。

ターミナル1

  • socat擬似ttyを生成するように設定
socat -d -d pty,link=/tmp/socat1,raw,echo=0 pty,link=/tmp/socat2,raw,echo=0
# 2023/12/30 10:53:02 socat[1869865] N PTY is /dev/pts/33
# 2023/12/30 10:53:02 socat[1869865] N PTY is /dev/pts/34
# 2023/12/30 10:53:02 socat[1869865] N starting data transfer loop with FDs [5,5] and [7,7]
  • これはループとして実行されます。

NO2。

  • tty をエクスポートし、gpgパスワードプロンプトを生成するコマンドを実行します。ここではgpg、あなたの場合はgitプロンプトを生成します。
export GPG_TTY=/tmp/socat1
gpg -d --homedir $HOME/.gnupg/ --quiet --yes --compress-algo=none --no-encrypt-to --batch --use-agent /path/to/gpgKey.gpg # command to elicit gpg prompt
  • コマンドがgpg標準入力を読み取るのを待っています。

ターミナル3(オプション)

file /tmp/socat2
# /tmp/socat2: symbolic link to /dev/pts/34
file /dev/pts/34
# /dev/pts/34: character special (136/34)
cat /tmp/socat2
# Please enter the passphrase to unlock the OpenPGP secret key:
# "REDACTED"
# 4096-bit RSA key, ID REDACTED
# created REDACTED (main key ID REDACTED).
# Passphrase:
  • catソケット内容印刷待ちがブロックされました。
  • /tmp/socat2リンクで/dev/pts/34文字デバイスなので、終了するのではなくtail内容を印刷した後と同じように動作します。

第4ターミナル

  • gpg以前に実行したコマンドにパスワードを送信します。
cat > /tmp/socat2
# Type your password.
  • エコを使用しないでください。あなたのパスワードはbash履歴にキャッシュされます。

あるいは、Pythonでプログラム的に実行することもできます。

import pathlib

with pathlib.Path('/tmp/socat2').open('w', encoding='utf8') as fp:
    fp.write('password\n')

$HOME/.gnupg/gpg-agent.conf

default-cache-ttl 120
max-cache-ttl 999999999
no-allow-external-cache
no-grab

pinentry-timeout 25
pinentry-program /usr/bin/pinentry-tty

関連情報