我目前正在尝试通过 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
,但这似乎执行得很晚。