我正在尝试将我的加密软件整合到 GnuPG,但遇到了一个令人困惑的问题。
我的主要单位是无头服务器,并且我专门在 tmux 中工作。没有 X 会话,因此我已将 gpg-agent 配置为使用 pinentry-curses。我已将 gpg-agent 配置为在登录时使用以下脚本通过 ssh-agent 模拟进行调用:
if pgrep -u "${USER}" gpg-agent >/dev/null 2>&1; then
eval `cat $gnupginf`
eval `cut -d= -f1 $gnupginf | xargs echo export`
else
eval `gpg-agent -s --enable-ssh-support --daemon`
fi
我已经将 ssh 密钥添加到 gpg-agent,但是当我尝试另一个 ssh 会话时,命令挂起。
我发现,如果我杀死 gpg-agent 并创建一个新的登录 shell,代理将按其应有的方式工作(调用 pinentry-curses 然后像 ssh-agent 一样工作)。
但是,如果我创建另一个登录 shell(例如,弹出打开另一个 tmux 窗格)并尝试 ssh,则该命令将挂起,并且 pinentry-curses 窗口将打印在最初启动代理的登录 shell 的内容上。
此外,如果我关闭了最初启动代理的 shell,pinentry-curses 无论如何都会被调用并导致 cpu 瘫痪的无限循环。 (已知错误,请参阅http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559936.)
本质上,我想知道如何更改我的设置才能使 GnuPG 代理像 ssh-agent 一样无缝工作。谢谢你的帮助!
答案1
事实证明这个非常简单。我没有使用该脚本,而是简单地从旧的钥匙串启动脚本中删除了“--agents”选项(指南这里)。
这会导致 Keychain 程序查找 ssh-agent 和 gpg-agent 文件。现在,即使依赖两种类型的代理,我的加密系统也可以非常无缝地工作。