访问私钥时 GPG 挂起

访问私钥时 GPG 挂起

我喜欢用我的 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)

相关内容