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

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

Ubuntu 22.04.1 LTS

当我git push REMOTE重新启动后执行 a 操作时,几秒钟后会出现一个对话框:

+---------------------------------------------------------------+
| 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 推送时您到底想做什么,但我猜您使用 gpg 文件)

编辑~/.gnupg/gpg-agent.conf

一天的这些值:

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

这样做,您只需每天输入一次密钥(或者在第一次按下时就可以了)

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

为了完整起见,您甚至可以在启动会话中放置文件解密、gpg show 或类似的内容,以便输入一次密钥并在当天剩余时间激活 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]
  • 这是循环运行的。

2号航站楼

  • 导出 ttygpg并运行生成密码提示的命令。这里我直接使用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

相关内容