103 votes

Pouvez-vous avoir plus d'un fichier ~/.ssh/config ?

Nous avons un serveur bastion que nous utilisons pour nous connecter à plusieurs hôtes, et notre fichier .ssh/config a atteint plus de mille lignes (nous nous connectons à des centaines d'hôtes). Cela commence à devenir un peu lourd et j'aimerais savoir s'il existe un moyen de diviser le fichier .ssh/config en plusieurs fichiers. L'idéal serait de spécifier quelque part que d'autres fichiers doivent être traités comme un fichier .ssh/config, par exemple :

~/.ssh/config
  ~/.ssh/config_1
  ~/.ssh/config_2
  ~/.ssh/config_3
  ...

J'ai lu la documentation sur ssh/config, et je ne vois pas comment cela est possible. Mais peut-être que quelqu'un d'autre a eu un problème similaire et a trouvé une solution.

76voto

Tom Points 720

El ~/.ssh/config n'ont pas de directive pour inclure d'autres fichiers, ce qui peut être lié à la vérification des permissions des fichiers par SSH.

Les suggestions autour de cela peuvent inclure un script pour attraper plusieurs changements ensemble soit sur le système ou via des crochets de checkin sur un dépôt. On peut également se tourner vers des outils tels que Puppet ou Augeas.

Cependant, quelle que soit votre approche, vous devrez concaténer les fichiers individuels pour en faire un seul fichier depuis l'extérieur du fichier.

$ cat ~/.ssh/config_* >> ~/.ssh/config

note : écraser : > v.s. ajouter : >>

Mise à jour de décembre 2017 :

À partir de la version 7.3p1, il existe l'option Include. Elle 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.

69voto

rush Points 1941

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.

Il n'est pas non plus possible d'inclure une configuration dans une autre.

43voto

Gav Points 3229

À partir de la version ssh 7.3 (publiée le 1er août 2016), une Include est disponible.

Inclure : Inclure le(s) fichier(s) de configuration spécifié(s). Chemins d'accès multiples chemin d'accès peuvent être spécifiés et chaque nom de chemin peut contenir des et des références de type Shell "~" aux répertoires personnels des utilisateurs. Les fichiers sans chemin absolu sont supposés être dans ~/.ssh . Un site Include peut apparaître à l'intérieur d'une directive Match o Host bloc à effectuer une inclusion conditionnelle.

(Voici le lien vers le rapport de bogue résolu, qui comprend également le correctif : https://bugzilla.mindrot.org/show_bug.cgi?id=1585#c24 )

17voto

Max Points 181

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.

2voto

ThorstenS Points 3044

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 paquet (deb, rpm) et le placerais dans un dépôt local. Et dans le postinst script le cat génère votre config. Peut-être que vous incluez aussi un dossier local... L'avantage est, que les mises à jour de ssh/config s'activent sur une base quotidienne pendant que cron-apt &Co fonctionnent.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X