Dépendant du réseau ~ / .ssh / config?

15

Au bureau, je peux me connecter à des machines internes sans proxy, mais j'ai besoin d'un proxy pour les connexions externes. En dehors du bureau, je peux me connecter à d'autres machines externes sans proxy, mais je dois utiliser l'un des 2 proxy pour me connecter aux machines internes.

Si je peux trouver un moyen de détecter automatiquement le réseau sur lequel je suis, puis-je demander à ssh de charger le fichier de configuration approprié?

Sinon, existe-t-il une solution plus élégante que d'écrire un script shell pour lier le fichier de configuration approprié à ~ / .ssh / config (ma meilleure idée jusqu'à présent)?

Edit: Je pense que @pcm et JonnyRo ont compris ma question et je vais essayer ce qu'ils suggèrent, mais juste pour être clair, je veux

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |
Nate Parsons
la source

Réponses:

11

Selon la configuration de votre proxy, vous pouvez simplement créer une entrée de configuration SSH qui fonctionne dans l'une ou l'autre situation. Par exemple, sur un réseau que j'utilise régulièrement, je dois ssh vers un hôte intermédiaire avant de pouvoir établir une connexion sortante. Donc, fondamentalement, j'installe une configuration qui ressemble à ceci.

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh [email protected] /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

Donc, quand je n'ai pas besoin d'utiliser un proxy, je peux simplement exécuter une commande comme ssh myhost.example.orget me connecter, mais quand j'ai besoin du proxy, j'exécute la commande ssh myhost.example.org%sshproxy.

Je soupçonne que vous pourriez probablement configurer une sorte d'alias ou un paramètre de saisie automatique qui ajouterait automatiquement le %proxybit.

Zoredache
la source
8

Vieille question, mais certaines idées de ce fil m'ont aidé et c'est une solution que j'ai trouvée:

Tout d'abord, la configuration ssh du serveur proxy .

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

Ensuite, la configuration du serveur B :

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

L'idée ici est que le cas par défaut se connecte à partir d'un site externe et que ProxyCommand initie d'abord une connexion ssh au proxy , puis se connecte au serveur-b . Si, d'autre part, nous sommes déjà situés sur le sous-réseau local, la ProxyCommand est désactivée et aucune connexion proxy au serveur-a n'est établie.

Peu importe où vous êtes, vous pouvez toujours atteindre server-abc par cette entrée et cette configuration détermine où vous êtes et établit la connexion en conséquence. Pour server-xyz , utilisez simplement la même idée.

J'ai fait une explication plus approfondie ici: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/

Robert Kihlberg
la source
7

Vous pouvez utiliser l'option -F pour sélectionner parmi différents fichiers de configuration. pour les deux cas de réseau. Vous pouvez ensuite créer des alias qui utilisent les différents fichiers de configuration, en fonction du réseau sur lequel vous vous trouvez, ou dans votre script de connexion, configurer un seul alias, en fonction de votre adresse IP.

pcm
la source
Merci! Les alias avec -F seront certainement mon alternative si je ne peux pas faire fonctionner un script basé sur IP.
Nate Parsons
C'est génial, j'étais sur le point de poser la même question. J'ai déjà écrit d'autres options pour définir des variables d'environnement lorsque je démarre un nouveau terminal, je peux facilement créer un alias ou créer un lien symbolique vers le bon .ssh / config en fonction de l'environnement.
newz2000
1

Écrivez un script shell qui vérifie votre IP par rapport à un modèle, puis créez un lien symbolique avec le script shell approprié.

Si, pour une raison quelconque, votre plage IP est la même pour le domicile et le travail, essayez de basculer en fonction de /etc/resolv.conf, qui contient les serveurs DNS configurés DHCP.

JonnyRo
la source
0

L'option "Host" dans .ssh / config vous permet de modifier la configuration en fonction de la destination. J'utilise cela pour ajuster la redirection de port et autres en fonction de l'endroit où je vais.

JOTN
la source
0

J'ai étudié cette question dans le passé et une solution possible est d'avoir une telle entrée dans le fichier de configuration:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

De cette façon, si vous êtes à l'extérieur, vous pouvez $ ssh machine.inside_domain. Si vous êtes à l'intérieur et que la résolution du DNS est en cours, vous pouvez $ ssh machine. Cela fonctionne bien pour moi.

Peut-être que quelqu'un peut améliorer cette idée, peut-être changer la configuration DNS pour qu'il résout automatiquement la machine en machine.inside_domain si vous êtes à l'extérieur et utilisez le point d'entrée SSH.

Fernando
la source