Are host configurations in the SSH config merged?
I have the following generic host configuration in my .ssh/ssh_config
:
Host *
ConnectTimeout 5
ServerAliveInterval 5
ServerAliveCountMax 12
I also have some specific configurations. For example the following alias:
Host work-server-1
Hostname a.b.c.d
Host work-server-2
Hostname i.j.k.l
Now, my question: when logging into the host work-server-1
, will SSH also use the ConnectTimeout
, ServerAliveInterval
and ServerAliveCountMax
setting as defined in the Host *
entry?
Solution 1:
For each directive, the first relevant occurrence in the ssh_config
is used.
Quoting man page for ssh_config
:
For each parameter, the first obtained value will be used. The configuration files contain sections separated by
Host
specifications, and that section is only applied for hosts that match one of the patterns given in the specification. ...Since the first obtained value for each parameter is used, more host-specific declarations should be given near the beginning of the file, and general defaults at the end.
So with the configuration file below:
- For all hosts,
ServerAliveInterval 1
is always used,4
and7
are never used, not even forwork
. -
ConnectTimeout
is2
forwork
, for other hosts it's3
. - For all hosts, the
ServerAliveCountMax
is5
, thework
-specific value6
is never used, not even forwork
.
ServerAliveInterval 1
Host work
ConnectTimeout 2
Host *
ConnectTimeout 3
ServerAliveInterval 4
ServerAliveCountMax 5
Host work
ServerAliveCountMax 6
ServerAliveInterval 7