我有一个装有 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,这将有助于精确定位该代理。
答案2
将脚本放入/etc/profile.d
。确保可执行位设置(chmod +x
)并且文件具有.sh
扩展名。