Solution 1 :
Le ~/.ssh/config
le fichier n'a pas de directive pour inclure d'autres fichiers, éventuellement liés à la vérification par SSH des autorisations de fichier.
Les suggestions autour de cela peuvent inclure un script pour regrouper plusieurs modifications soit sur le système, soit via des crochets d'archivage sur un référentiel. On pourrait également se pencher sur des outils tels que Puppet ou Augeas.
Cependant, quelle que soit votre approche, vous devrez concaténer des fichiers individuels pour en faire un seul fichier extérieur au fichier.
$ cat ~/.ssh/config_* >> ~/.ssh/config
remarque : écraser :>
v.s. ajouter :>>
Mise à jour décembre 2017 :
À partir de 7.3p1, il existe l'option Inclure. Ce qui vous permet d'inclure des fichiers de configuration.
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.
Solution 2 :
Vous pouvez spécifier le fichier de configuration actuel à utiliser dans l'option ssh comme ceci :
ssh -F /path/to/configfile
Il semble que ce soit le seul moyen.
De plus, il n'y a aucun moyen d'inclure une configuration dans une autre.
Solution 3 :
À partir de ssh 7.3 (publié le 1er août 2016), un Include
directive est disponible.
Inclure :incluez le(s) fichier(s) de configuration spécifié(s). Plusieurs chemins d'accès peuvent être spécifiés et chaque chemin d'accès peut contenir des globwildcards et des références "~" de type shell aux répertoires d'accueil de l'utilisateur. Les fichiers sans chemin d'accès absolu sont supposés être en
~/.ssh
. AnInclude
directive peut apparaître à l'intérieur d'unMatch
ouHost
bloc pour effectuer une inclusion conditionnelle.
(Voici le lien vers le rapport de bogue résolu, qui inclut également le correctif :https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24)
Solution 4 :
J'utilise personnellement ces commandes pour compiler la configuration 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.)
ou :
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)
parce que :
alias ssh='ssh -F <(cat .ssh/*.config)'
ne fonctionne pas pour moi, retour :
ssh: Can't open user config file /dev/fd/63: Bad file descriptor
J'espère que cela vous sera utile.
Solution 5 :
J'utiliserais aussi cat config_* > config
pour générer l'ensemble de la configuration. Mais je n'utiliserais pas puppet/cfengine etc. pour cela, s'ils ne sont pas encore en place (BTW :pourquoi ne pas utiliser un système de gestion de configuration ???).
Je générerais un package (deb, rpm) et le mettrais dans un référentiel local. Et dans le script postinst, le chat génère votre config. Peut-être que vous incluez également un dossier local... L'avantage est que les mises à jour ssh/config s'activent quotidiennement pendant l'exécution de cron-apt &Co.