1

我目前正在尝试通过 SSH设置GnuPG 代理转发。由于我GNUPGHOME="$XDG_DATA_HOME/gnupg"在本地和远程系统上都进行了设置,因此我没有使用默认的 GPG 套接字路径,而是在我的 中配置了以下内容~/.ssh/config

Host myhost
    HostName 1.2.3.4
    User myuser
    ForwardAgent yes
    RemoteForward /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent.extra

此配置的问题是,在第一次连接时,远程父目录/run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/尚不存在,因此RemoteForward失败并显示以下内容:

Warning: remote port forwarding failed for listen path /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent

创建该目录的正确方法是运行gpgconf --create-socketdir(如果目录存在,则为无操作)。但是,当我将它放入我的.bashrc时,它似乎仅在 SSH 尝试转发RemoteForward. 也就是说,只有在建立第二个 SSH 连接时才会创建套接字:

$ ssh myhost
Warning: remote port forwarding failed for listen path /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent
[myuser@myhost ~]$ # Socket not correctly forward, but directory has been created now.
[myuser@myhost ~]$ logout
$ ssh myhost
[myuser@myhost ~]$ # Socket correctly forward on second attempt.

所以我的问题是:如何在 SSH 尝试链接中指定的套接字之前运行命令(在这种情况下gpgconf --create-socketdir)或至少创建一个目录(在这种情况下) ?/run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/RemoteForward

我在这里唯一的猜测是将命令放入~/.bashrc,但这似乎执行得很晚。

4

1 回答 1

0

是的,这是一个错误,您引用的 GnuPG 文档没有指出该问题。

我使用添加到远程系统的 systemd 用户服务来解决这个问题,我想将我的 gpg 代理的套接字转发到。我试图在https://dev.gnupg.org/D435中将它贡献给 GnuPG,但是对于谁应该负责创建套接字所在的目录存在一些分歧。

这非常令人沮丧。

于 2022-02-16T23:31:57.797 回答