Chargement de bloc conditionné dans ssh_config

source

Mon problème : J’ai un oridnateur portable que j’utilise chez moi et en déplacement. Je l’utilise pour accéder au machine qui sont chez moi. La machine a laquel je souhaite accéder utilise le port ssh 22. Sauf que pour la blague en IPV4, j’ai un accès indirect (NAT) à la machine via port 2222 de ma box et que en IPV6 j’ai un accès direct sur le port 22.

Donc quand je suis hors de mon réseau, je passe via un nom de domaine qui pointe vers ma machine en IPV4 et en IPV6. Donc un nom de domaine… 2 port différent si on est en IPV4 ou 6… pas bien du tout… Pour courroné le tout… je ne sais pas pourquoi je n’arrive pas a joindre ma machine en IPV6 depuis mon réseau alors que rien ne semble l’interdir.

Donc pour résoudre mon soucis de connexion ssh methode simple mais efficasse : J’ai deux config, une qui se nomme serv01.local et serv01.web. Chacune ayant ses specifications.

Mais bon je suis fénéant donc je me suis posé la question : peut-on mettre des conditions sur le chargement des bloc host du fichier ~/.ssh/config.

La réponse est oui avec la clause Match.

Match host serv01 exec "~/.ssh/mon_prog param1"
    hostname 192.168.0.2
    port 2222

host serv01
    hostname serv01.mon_domaine.org
    port 22

Lors qu’il y a Match le bloc est chargé et on ne va pas plus loin dans le fichier config.

Dans le programme mon_prog on renvoie 0 en cas de réussite du match ou 1 quand c’est un échec.

Le programme suivant prend parametre 1 le nom du réseau que je souhaite tester sur ma carte réseau wlp4s0.

#!/usr/bin/env bash

if [[ $(nmcli | grep "wlp4s0: connecté à " | awk '{print $4}') = "$1" ]]
then
    exit 0;
else
    exit 1;
fi

ce qui nous donne au démarrage

nithir@turing_machine ~/.ssh $ > ssh serv01 -vvv
OpenSSH_9.2p1 Debian-2+deb12u3, OpenSSL 3.0.15 3 Sep 2024
debug1: Reading configuration data /home/nithir/.ssh/config
debug3: kex names ok: [curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256]
debug1: /home/nithir/.ssh/config line 21: Applying options for *
debug2: checking match for 'host minerve exec "~/.ssh/on_wifi.sh mon_reseau"' host serv01 originally serv01
debug3: /home/nithir/.ssh/config line 61: matched 'host "serv01"'
debug1: Executing command: '~/.ssh/on_wifi.sh mon_reseau'
debug3: command returned status 0
debug3: /home/nithir/.ssh/config line 61: matched 'exec "~/.ssh/on_wifi.sh mon_reseau"'
debug2: match found
debug1: /home/nithir/.ssh/config line 67: Applying options for serv01
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
...