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 !

7voto

Dave Points 61

Eh bien, j'ai un peu triché pour faire ça. Dans mes fichiers bash .profile-ish, j'ai un bloc qui remplace divers éléments de mon répertoire personnel à la connexion, donc je génère un nouveau bloc à chaque fois. Exemple :

rm ~/.ssh/config
cat ~/conf/myservers.sshconfig >> ~/.ssh/config

[ -f ~/conf/workservers.sshconfig ] && cat ~/conf/workservers.sshconfig >> ~/.ssh/config
(or something like this:)
for i in `ls ~/conf/sshconfigs` ; do
    cat $i >> ~/.ssh/config
done

chmod 600 ~/.ssh/config

Cela me permet également de faire des choses comme ajouter des blocs de configuration au fichier de configuration ssh uniquement si je suis sur l'hôte A ou B, mais pas sur mes systèmes personnels.

Maintenant, je sais, quelqu'un va râler que si vous vous connectez beaucoup, cela pourrait causer un ralentissement excessif, mais en pratique, je ne l'ai jamais vraiment remarqué. Et je suis sûr que vous pourriez mettre cela dans un script et le déclencher via cron aussi.

3voto

A. R. Diederich Points 756

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.

3voto

amontero Points 31

Une autre solution, basée sur FUSE (pas testée moi-même) :

https://github.com/markhellewell/sshconfigfs

"Plutôt que de devoir continuer à gérer un gros fichier, [...] construisez plutôt un "fichier" de configuration de manière dynamique à partir de nombreux petits morceaux logiques."

J'ai également trouvé un article qui fait cela via des FIFO : http://www.linuxsysadmintutorials.com/multiple-ssh-client-configuration-files/

2voto

Senseful Points 22513

Aucune de ces solutions d'alias ne fonctionne pour git ou d'autres programmes autres que ssh .

J'ai fait un montage rapide, mais vous pourriez vouloir l'améliorer.

Ajoutez ceci à votre ~/.bashrc

mkdir -p ~/.ssh/config.d/
[ -e ~/.ssh/config ] && mv ~/.ssh/config ~/.ssh/config.bak.$(date -Ins)
cat ~/.ssh/config.d/* > ~/.ssh/config

Chaque fois que vous démarrez une session, il fusionne tous les fichiers dans le répertoire ~/.ssh/config.d . (ligne 3)

L'inconvénient de cette version est que si vous modifiez ~/.ssh/config La prochaine session que vous ouvrirez, vos modifications seront perdues, donc pour éviter cela, je déplace le fichier existant vers un fichier .bak. (ligne 2) Le problème, c'est qu'au bout d'un certain temps, vous aurez un grand nombre de fichiers .bak.

1voto

panticz Points 271

Vous pouvez facilement mettre à niveau la version de SSH sur Ubuntu vers la v7.3 (testée sur Ubuntu Xenial 16.04) en installant les paquets de Yakkety :

echo "deb http://old-releases.ubuntu.com/ubuntu yakkety main" > /etc/apt/sources.list.d/yakkety.list
apt-get update
apt-get install -y ssh
rm /etc/apt/sources.list.d/yakkety.list
apt-get update

Vérifier la version de SSH

ssh -V
OpenSSH_7.3p1 Ubuntu-1, OpenSSL 1.0.2g 1 Mar 2016

Configurer SSH pour utiliser les includes du répertoire ~/.ssh/config.d

mkdir ~/.ssh/config.d
sed -i '1iInclude config.d/*' ~/.ssh/config

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