Arrêter la configuration ssh lors du premier match

18

J'ai ajouté un proxy local pour tous mes hôtes dans ma configuration .ssh, mais je veux lancer un shell dans mon VM local sans la commande proxy. Sortie de ma tentative ssh:

debug1: /Users/bbarbour/.ssh/config line 1: Applying options for local.dev
debug1: /Users/bbarbour/.ssh/config line 65: Applying options for *

Étant donné la configuration ssh suivante, comment puis-je empêcher l'application de ProxyCommand à l'entrée local.dev?

Host local.dev
    HostName dev.myserver.com
    User developer
...
Host *
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p
Projet de loi sur les chaudières
la source

Réponses:

22

Vous pouvez exclure local.dev de ProxyCommand, en utilisant !avant:

Host * !local.dev
    ProxyCommand /usr/local/bin/corkscrew 127.0.0.1 8840 %h %p

De la documentation ssh_config :

Si plusieurs motifs sont fournis, ils doivent être séparés par des espaces.

Une entrée de modèle peut être annulée en la préfixant avec un point d'exclamation (`! ') . Si une entrée annulée est mise en correspondance, l'entrée Hôte est ignorée, que les autres modèles de la ligne correspondent ou non. Les correspondances négatives sont donc utiles pour fournir des exceptions pour les correspondances génériques.

La documentation indiquait également:

Pour chaque paramètre, la première valeur obtenue sera utilisée . Les fichiers de configuration contiennent des sections séparées par des spécifications `` Host '', et cette section n'est appliquée qu'aux hôtes qui correspondent à l'un des modèles donnés dans la spécification. Le nom d'hôte correspondant est celui donné sur la ligne de commande.

Ainsi, vous pouvez également désactiver ProxyCommand pour local.dev en remplaçant la valeur que vous avez définie dans Host *:

Host local.dev
    HostName dev.myserver.com
    User developer
    ProxyCommand none
cuonglm
la source
8

Une option du fichier de configuration est appliquée la première fois qu'elle correspond. Comme vous n'avez pas de ProxyCommand dans l'entrée hôte, celui de votre *entrée sera utilisé.

Il existe deux façons de contourner ce problème:

  • Pour les hôtes où vous ne souhaitez pas utiliser la commande proxy, ajoutez simplement la ligne
    ProxyCommand aucun
  • Pour l' *entrée, notez spécifiquement que l'entrée ne doit pas s'appliquer à l'hôte local.deven la refusant avec un!
    Hôte! Local.dev *
Jenny D
la source
pour séparer plusieurs hôtes, utilisez l'espace. la virgule (,) n'a pas fonctionné pour moi. ID du distributeur: Ubuntu Description: Ubuntu 17.10 Version: 17.10 Nom de code: artful
Aruna
Merci @ArunaFromLK - Je ne peux pas croire que j'ai raté ça, et que personne d'autre ne l'a repéré en 3,5 ans! J'ai mis à jour la réponse maintenant.
Jenny D