I'm currently trying to set up GnuPG Agent Forwarding via SSH.
Since I set GNUPGHOME="$XDG_DATA_HOME/gnupg" on both the local and the remote system, I'm not using the default GPG sockets paths, but instead have configured the following in my ~/.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
The problem with this configuration is, that on the first connection the remote parent directory /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/ does not yet exists, so the RemoteForward fails with the following:
Warning: remote port forwarding failed for listen path /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/S.gpg-agent
The correct way to create that directory would be to run gpgconf --create-socketdir (which is a no-op if the directory exists).
However, when I put this into my .bashrc it only seems gets executed after SSH tries to forward the socket specified in RemoteForward.
That is, the socket is only created when establishing a second SSH connection:
$ 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.
So my question is: how can I run a command (in this case gpgconf --create-socketdir) or at least create a directory (in this case /run/user/1000/gnupg/d.fj15x7xb73ergseatdpnwdt7/) before SSH attempts to link a socket specified in RemoteForward?
My only guess here was to put the command into ~/.bashrc but that seems to be executed to late.