Ian Haken
2021-Jan-23 20:54 UTC
Feature Request: Token support on Include config directive
I've got a feature request which is (hopefully?) straightforward, which is
that we'd like to be able to use tokens (%n specifically for the original
remote hostname) as a token on the Include directive. This would allow us
to do something like:
Match Host *.corp
Include ~/.local/share/my_corp_data/managed_ssh_configs/%n/config
In this example I imagine that some other process is managing (downloading
and updating) SSH configs on the machine, and this would allow us to have
just a single line for using any number of such configs.
To be even more transparent, we're actually being even more dynamic than
that by (ab)using "Match exec" functionality to do something similar
to
Lyft's blessclient integration [1] which invokes a heavyweight script that
not only does some custom hostname resolution but also fetches some
credentials (similar to blessclient) and writes out a just-in-time config
which includes the resolved hostname, pointers to the credentials, what
jumphost to use (which depends on many factors of the resolved host), etc.
Today we write all this at a well-known path and just have an Include
directive pointing to that well-known path, but this is incompatible with
parallel invocations of ssh. Being able to parameterize what path to
Include would save us a lot of trouble. :)
[1] https://github.com/lyft/python-blessclient
Darren Tucker
2021-Jan-23 22:56 UTC
Feature Request: Token support on Include config directive
On Sun, 24 Jan 2021 at 07:57, Ian Haken <ihaken at netflix.com> wrote:> I've got a feature request which is (hopefully?) straightforward, which is > that we'd like to be able to use tokens (%n specifically for the original > remote hostname) as a token on the Include directive.Unfortunately it's not straightforward. Include directives are read and processed as the config file is parsed (readconf.c, look for "case oInclude"). Percent-token expansion happens after the config is fully parsed, immediately before it's used (ssh.c, look for the percent_dollar_expand calls). It would probably be possible to perform some kind of expansion when Include is parsed, but it would have different semantics compared to all of the other expansions, eg UserKnownHostsFile %r/bar User foo does expand UserKnownHostsFile, to foo/bar but Include %r/bar User foo would not. -- Darren Tucker (dtucker at dtucker.net) GPG key 11EAA6FA / A86E 3E07 5B19 5880 E860 37F4 9357 ECEF 11EA A6FA (new) Good judgement comes with experience. Unfortunately, the experience usually comes from bad judgement.