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キーの初期パスワードをキャッシュする方法です。自動化目的に合わせて調整できます。試してみましたが結果expect
はgpg-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