替换 GNOME Shell、Wayland 和 SystemD 中的 SSH 代理

替换 GNOME Shell、Wayland 和 SystemD 中的 SSH 代理

我使用的是 Fedora 24 (amd64),它运行 GNOME 3/GNOME Shell 作为桌面环境,使用 Wayland 作为显示服务器,使用 SystemD 作为 init。非常标准,开箱即用,这就是 Fedora 24 的发布方式。

我之前的发行版仍然使用 X,所以我在 /etc/X11/Xsession.d/autostart 中有一个名为 90-gpg-agent 的脚本,它有条件地启动 gpg-agent 或获取其导出的变量,使它们可用于启动的图形程序。这使得像 unison-gtk 这样的程序拥有正确的SSH_AUTH_SOCK环境变量,这样它们就可以使用 gpg-agent 作为 SSH 代理。 bash 会话中运行的任何内容都只会使用我的 .bashrc 中的环境变量,但图形应用程序需要将其导出以供访问。

Wayland/GNOME/SystemD 是否有等效的工具可以导出这些环境变量并将它们提供给在该显示服务器+桌面环境中启动的应用程序?

答案1

尝试systemctl --user import-environment SSH_AUTH_SOCK在 中的脚本中使用/etc/X11/xinit/xinitrc.d/。查看一下/etc/X11/xinit/xinitrc.d/50-systemd-user.sh以供参考。

答案2

只需在您的 gpg 代理中启用 ssh 支持 – 添加行enable-ssh-agent~/.gnupg/gpg-agent.conf然后注销(然后重新登录)。

此设置由 选取/etc/X11/Xsession.d/90gpg-agent

问题是这仅适用于 X11 程序 - 本机 Wayland 客户端不受影响。要解决这个问题,有两个选项,具体取决于gpgconf --list-dirs agent-ssh-socket打印的内容:

  • 如果它是固定路径,请创建一个文件.config/environment.d/ssh.conf并添加该输出:

    SSH_AUTH_SOCK=/run/user/XXX/gnupg/S.gpg-agent.ssh
    

    gpgconf打印时发生的任何其他事情。

  • 如果您下次登录时它是位于其他位置的临时文件,请将这些行添加到您的.bashrc(或您正在使用的任何 shell 的等效项)中:

    if [ -z "$SSH_AUTH_SOCK" ] ; then
        export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
    fi
    dbus-update-activation-environment --systemd SSH_AUTH_SOCK
    

    这仅适用于 shell 以及在第一个 shell 之后启动的其他 Wayland 程序,但这应该足够了。

答案3

有点太晚了,但这可能对其他人有帮助。

根据Gnome 密钥环 SSH 代理 Wiki 页面您可以在 Gnome 密钥环中禁用 SSH 代理支持。

以下是从该来源复制并粘贴的相关信息:

作为系统分销商或用户,如果您使用其他 SSH 代理(例如ssh-agentOpenSSH 附带的),您可能需要禁用 GNOME Keyring 中的 SSH 代理,以防止 SSH 使用它而不是您首选的 SSH 代理。

有多种方法可以禁用 GNOME 密钥环 SSH 代理:

  • 使用“启动应用程序”capplet(即:gnome-session-properties)并禁用“SSH Key Agent”启动程序。
  • gnome-keyring无需 SSH 支持即可构建。使用以下配置选项
    $ ./configure --disable-ssh-agent
    
  • 如果您手动启动gnome-keyring或从脚本启动,则可以使用该--components选项来排除启动 SSH 支持。
    $ gnome-keyring-daemon --components keyring,pkcs11
    

相关内容