Soluzione 1:
Il ~/.ssh/config
file non ha una direttiva per includere altri file, possibilmente correlata al controllo di SSH per i permessi dei file.
Suggerimenti su questo possono includere uno script per catturare diverse modifiche insieme sul sistema o tramite hook di check-in su un repository. Si potrebbero anche esaminare strumenti come Puppet o Augeas.
In qualunque modo ti avvicini, però, dovrai concatenare i singoli file in modo che siano un singolo file dall'esterno del file.
$ cat ~/.ssh/config_* >> ~/.ssh/config
nota: sovrascrivi:>
vs. aggiungere:>>
Aggiornamento dicembre 2017:
Dalla versione 7.3p1 in poi, c'è l'opzione Includi. Che ti permette di includere i file di configurazione.
Include
Include the specified configuration file(s). Mul‐
tiple pathnames may be specified and each pathname
may contain glob(3) wildcards and, for user config‐
urations, shell-like “~” references to user home
directories. Files without absolute paths are
assumed to be in ~/.ssh if included in a user con‐
figuration file or /etc/ssh if included from the
system configuration file. Include directive may
appear inside a Match or Host block to perform con‐
ditional inclusion.
Soluzione 2:
Puoi specificare il file di configurazione corrente da usare in ssh come questa opzione:
ssh -F /path/to/configfile
Sembra che sia l'unico modo.
Inoltre non c'è modo di includere una configurazione in un'altra.
Soluzione 3:
A partire da ssh 7.3 (rilasciato il 1° agosto 2016), un Include
direttiva è disponibile.
Includi :include i file di configurazione specificati. È possibile specificare più percorsi e ciascun percorso può contenere globwildcard e riferimenti "~" simili a shell alle directory home degli utenti. Si presume che i file senza percorsi assoluti si trovino in
~/.ssh
. AnInclude
la direttiva può apparire all'interno di unMatch
oHost
blocca per eseguire l'inclusione condizionale.
(Ecco il link al bug report risolto, che include anche la patch:https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24)
Soluzione 4:
Uso personalmente questi comandi per compilare la configurazione ssh:
alias compile-ssh-config='echo -n > ~/.ssh/config && cat ~/.ssh/*.config > ~/.ssh/config'
alias ssh='compile-ssh-config && ssh'
# (This will get used by other programs depending on the ~/.ssh/config)
# (If you need you can run the compile-ssh-config command via cron etc.)
oppure:
alias compile-ssh-config='echo -n > ~/.ssh/config-compilation && cat ~/.ssh/*.config > ~/.ssh/config-compilation'
alias ssh='compile-ssh-config && ssh -F ~/.ssh/config-compilation'
# (This is saver and won't over write an existing ~/.ssh/config file)
perché:
alias ssh='ssh -F <(cat .ssh/*.config)'
non funziona per me, restituendo:
ssh: Can't open user config file /dev/fd/63: Bad file descriptor
Spero che questo possa esserti di aiuto.
Soluzione 5:
Userei anche cat config_* > config
per generare l'intera configurazione. Ma non userei pupazzo/cfengine ecc. per questo, se non sono ancora presenti (a proposito:perché non usare un sistema di gestione della configurazione???).
Genererei un pacchetto (deb, rpm) e lo inserirei in un repository locale. E nello script postinst il gatto genera il tuo config. Forse includi anche una cartella locale... Il vantaggio è che gli aggiornamenti ssh/config si attivano su base giornaliera mentre cron-apt &Co viene eseguito.