248 votes

Existe-t-il un moyen pour qu'un fichier de configuration SSH puisse en inclure un autre ?

Au cas où ça compte :

  • Système d'exploitation : Ubuntu 10.04
  • SSH : OpenSSH_5.3p1 Debian-3ubuntu5

Je voudrais qu'un fichier de configuration SSH en inclue un autre. Le cas d'utilisation serait de définir ce que je veux dans mon fichier de configuration SSH par défaut. .ssh/config puis de préinstaller quelques éléments supplémentaires dans un autre fichier (par exemple ~/.ssh/foo.config ). Je veux que le second fichier incorpore le premier, afin de ne pas avoir à tout dupliquer dans le premier. Est-ce faisable ? Merci !

320voto

PMaynard Points 2596

À partir de la version 7.3p1, il y a la fonction Include mot-clé, qui vous permet d'inclure des fichiers de configuration.

Include

Inclure 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 caractères génériques glob(3) et , pour les configurations utilisateur, des références de type Shell "~" vers les répertoires personnels de l'utilisateur.  Les fichiers sans chemin absolu sont supposés être dans ~/.ssh si elle est incluse dans un fichier de configuration utilisateur ou /etc/ssh si elle est incluse dans le fichier de configuration du système.  Include peut apparaître à l'intérieur d'un Match o Host bloc pour effectuer une inclusion conditionnelle.

Source : ssh_config(5) .

Vous devez mettre le Inclure en haut du fichier.

Par exemple, vous pourriez avoir dans ~/.ssh/config :

Include config.d/home

Host github.com
    HostName github.com
    User git

et en ~/.ssh/config.d/home :

Host laptop
    HostName laptop.lan

A partir des commentaires, utilisez la commande ci-dessous pour inclure tous les fichiers dans le fichier config.d répertoire :

Include config.d/*

27voto

verveguy Points 931

Non, à ma connaissance, ce n'est pas possible.

Voici les liens vers les demandes de fonctionnalités / tickets de bogue ouverts correspondants :

https://bugzilla.mindrot.org/show_bug.cgi?id=1585

https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/739495

27voto

estani Points 716

Si vous voulez démarrer un client ssh, vous pouvez le faire en bash :

#files are .ssh/config and ~/.ssh/foo.config
alias ssh='ssh -F <(cat .ssh/config ~/.ssh/foo.config)'

puis vous utilisez ssh normalement et les deux fichiers seront lus dans cet ordre.

Pour le démon du serveur sshd vous pourriez faire la même chose, en utilisant simplement -f au lieu de -F et notez-le à l'endroit où vous démarrez directement le démon. Vous n'avez pas besoin d'un alias.

Une deuxième possibilité, selon la page de manuel, est de mettre la configuration du système dans le répertoire /etc/ssh/ssh_config et celui de l'utilisateur dans ~/.ssh/config .

Mise à jour Apparemment, il y a un problème avec certaines versions de bash et la façon dont les périphériques sont créés. (voir http://bugs.alpinelinux.org/issues/1465 )

Il s'agit d'une solution de contournement (bien qu'elle soit, à mon avis, laide) :

mkfifo /tmp/ssh_fifo
cat ~/.ssh/config ~/.ssh/foo.config >/tmp/ssh_fifo & 
ssh -F /tmp/ssh_fifo myserver
rm /tmp/ssh_fifo

donc si vous voulez, vous pouvez créer une fonction à partir de cela (ou un script) :

ssh() {
    tmp_fifo=$(mktemp -u --suffix=_ssh_fifo)
    mkfifo "$tmp_fifo" 
    cat ~/.ssh/config ~/.ssh/foo.config >"$tmp_fifo" 2>/dev/null & 
    /usr/bin/ssh -F "$tmp_fifo" "$@"
    rm "$tmp_fifo"
}

20voto

Christian Hudon Points 273

À 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). Plusieurs noms de 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 )

14voto

Aleksandr Makov Points 263

De même que pour l'autre "mocheté", voici la mienne en une phrase :

alias ssh="cat ~/.ssh/config.d/* > ~/.ssh/config; ssh"

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