如何在 Ubuntu 16.04 上正确启动 gpg-agent

如何在 Ubuntu 16.04 上正确启动 gpg-agent

我有一个装有 gpg-key 的 Yubikey4,用作智能卡。我可以这样做gpg2 card-status,它为我提供了显示所有子密钥的整个过程,一切都很顺利。

然后我想使用 gpg-agent 通过我的 gpg 密钥 ssh 到远程主机。我将以下内容添加到我的~/.gnupg/gpg-agent.conf

enable-ssh-support
pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 60

我还在SSH_AUTH_SOCK.bashrc 中进行了如下设置:

export SSH_AUTH_SOCK=~/.gnupg/S.gpg-agent.ssh

如果我重新启动机器,密钥将被添加并可见ssh-add -l

4096 SHA256....... cardno: ..... (RSA)

但是任何尝试通过 ssh 连接到远程服务器的尝试都会挂起,ssh -vvv告诉我机器尝试签名并发送密钥,但代理拒绝操作。

如果我随后执行使用各种来源编写的脚本,那么一切都会正常。

   killall gpg
   export SSH_AUTH_SOCK=~/.gnupg/S.gpg-agent.ssh; gpg-agent --daemon --keet-tty --use-standard-socket --pinentry-program=/usr/bin/pinentry-curses 

我尝试使用 bashrc 实现此功能,并使用我的 deskopt-manager 和用户 systemd 任务执行它,但无济于事。

有人能帮我弄清楚如何在登录时自动启动它,而无需执行“我的脚本”吗?

答案1

简短回答:

以 root 身份执行:

$ echo enable-ssh-support >> ~/.gnupg/gpg-agent.conf
# editor /etc/X11/Xsession.options
    ... comment out "use-ssh-agent" ...
# aptitude purge libpam-gnome-keyring

注销您的桌面会话并再次登录,并检查 $SSH_AUTH_SOCK 是否指向您的 gpg-agent。

解释 :

默认情况下,gpg-agent 不启用其 SSH 代理。这可以通过传递--enable-ssh-support命令行或在配置文件中添加一行来实现,如上所示。

其次,其他 SSH 代理的问题。OpenSSH 代理默认启动,由 x11-common 包设置 /etc/X11/Xsession.d/90x11-common_ssh-agent。如果运行 GNOME,GNOME Keyring 代理也会运行。这两者都会干扰我们的 GnuPG 代理。

/etc/X11/Xsession.options通过如上编辑可以禁用 OpenSSH 代理。

禁用 GNOME Keyring 代理可能有点复杂。使用 Xfce,可以卸载 libpam-gnome-keyring 包并确保 Xfce 不会启动 GNOME 服务(设置 → 会话和启动 → 高级 → 启动时启动 GNOME 服务– 如果已勾选,请取消勾选)。

故障排除

如果 SSH_AUTH_SOCK 仍然没有指向您的 gpg-agent,则可能是有另一个代理仍在干扰您的 GnuPG 代理。SSH_AGENT_PID 变量应包含代理进程的 PID,这将有助于精确定位该代理。

来源 : 我的完美 GnuPG / SSH 代理设置

答案2

将脚本放入/etc/profile.d。确保可执行位设置(chmod +x)并且文件具有.sh扩展名。

相关内容