我喜欢用我的 PGP 密钥签署我的 git 提交,所以当我去的时候我非常震惊,git commit -S
但 git 没有提示输入我的 PGP 密钥密码,而是开始挂起。几个月来我没有对我的 GPG 设置进行任何更改,并且从那时起我已经进行了多次提交,没有出现任何问题。此外,当我尝试使用 查看我的私钥时gpg -K
,gpg 会挂起。但是,当我运行gpg -k
查看我的公钥时,它会像平常一样返回列表。希望有人能了解导致此问题的原因以及如何解决它。
答案1
我遇到了这个确切的问题(OSX Sierra 10.12.6,gpg/GnuPG 2.2.5)
会挂起的命令:
gpg -K # --list-secret-keys
gpg -d # --decrypt
gpg --edit-key
gpgconf --kill gpg-agent
我的解决方案与提到的相同约翰与上面的大多数其他方法一样(即杀死 gpg-agent)如何重新启动 gpg 代理也会挂。
# Solution
pkill -9 gpg-agent
然后为了签署 git 提交,我设置了 tty env,如所提到的CAS上面以及也在gpg 未能签署提交对象。
export GPG_TTY=$(tty)
答案2
$ ps aux | grep -E "gpg-agent"
alper 28970 0.0 92436 3284 15:31 0:00 /usr/bin/gpg-agent --supervised
这里输出变量包含28970
.
from subprocess import Popen, PIPE
import signal
def kill_process_by_name(process_name):
p1 = Popen(["ps", "auxww"], stdout=PIPE)
p2 = Popen(["grep", "-E", process_name], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # noqa
p3 = Popen(["awk", "{print $2}"], stdin=p2.stdout, stdout=PIPE)
p2.stdout.close()
output = p3.communicate()[0].decode("utf-8").strip()
lines = output.splitlines() # awk may return more than one pid number
for pid in lines:
if pid.isnumeric():
os.kill(int(pid), signal.SIGKILL)