¿Depende de la red ~ / .ssh / config?

15

En la oficina, puedo conectarme a máquinas internas sin un proxy, pero necesito un proxy para conexiones externas. Fuera de la oficina, puedo conectarme a otras máquinas externas sin un proxy, pero necesito usar uno de los 2 proxies para conectarme a máquinas internas.

Si puedo encontrar una manera de autodetectar en qué red estoy, ¿puedo indicarle a ssh que cargue el archivo de configuración apropiado?

Si no, ¿hay una solución más elegante que escribir un script de shell para vincular el archivo de configuración apropiado a ~ / .ssh / config (mi mejor idea hasta ahora)?

Editar: creo que @pcm y JonnyRo entendieron mi pregunta e intentaré lo que sugieren, pero para ser claros, quiero

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

Respuestas:

11

Dependiendo de cómo esté configurado su proxy, simplemente puede crear una entrada de configuración SSH que funcione en cualquier situación. Por ejemplo, en una red que uso regularmente, tengo que enviar ssh a un host intermedio antes de poder establecer una conexión saliente. Así que básicamente configuro una configuración que se ve así.

# 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

Entonces, cuando no necesito usar un proxy, simplemente puedo ejecutar un comando como ssh myhost.example.orgy conectarme, pero cuando necesito el proxy, ejecuto el comando ssh myhost.example.org%sshproxy.

Sospecho que probablemente podría configurar algún tipo de alias o configuración de autocompletar que agregaría automáticamente el %proxybit.

Zoredache
fuente
8

Antigua pregunta, pero algunas ideas en este hilo me ayudaron y esta es una solución que se me ocurrió:

Primero, la configuración ssh del servidor proxy .

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

Luego, la configuración del Servidor 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

La idea aquí es que el caso predeterminado es conectarse desde un sitio externo y el ProxyCommand inicia primero una conexión ssh al proxy y luego se conecta al servidor-b . Si, por otro lado, ya estamos ubicados en la subred local, el ProxyCommand está deshabilitado y no se establece una conexión proxy al servidor-a .

Independientemente de dónde se encuentre, siempre puede comunicarse con server-abc mediante esta entrada y esta configuración determina dónde se encuentra y configura la conexión en consecuencia. Para server-xyz , solo use la misma idea.

Hice una explicación más completa aquí: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/

Robert Kihlberg
fuente
7

Puede usar la opción -F para seleccionar entre diferentes archivos de configuración. para los dos casos de red. A continuación, puede crear alias que utilicen los diferentes archivos de configuración, según la red en la que se encuentre, o en la configuración de su script de inicio de sesión un solo alias, según su dirección IP.

pcm
fuente
¡Gracias! Los alias con -F definitivamente serán mi alternativa si no puedo hacer que un script funcione basado en IP.
Nate Parsons
Esto es increíble, estaba a punto de hacer la misma pregunta. Ya escribo algunas otras opciones para establecer variables de entorno cuando inicio un nuevo terminal, puedo crear fácilmente un alias o un enlace simbólico con el .ssh / config adecuado según el entorno.
newz2000
1

Escriba una secuencia de comandos de shell que compruebe su IP contra un patrón, luego enlace simbólicamente la secuencia de comandos de shell adecuada.

Si por algún motivo su rango de IP es el mismo para el hogar y el trabajo, intente cambiar según /etc/resolv.conf, que contiene los servidores DNS configurados por DHCP.

JonnyRo
fuente
0

La opción "Host" en .ssh / config le permite cambiar la configuración en función del destino. Lo uso para ajustar el reenvío de puertos y demás según el lugar al que voy.

JOTN
fuente
0

He examinado esta pregunta en el pasado y una posible solución es tener esa entrada en el archivo de configuración:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

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

De esta manera, si está afuera, puede $ ssh machine.inside_domain. Si está dentro y tiene resolución DNS, puede $ ssh machine. Eso funciona bien para mi.

Tal vez alguien pueda mejorar esta idea, tal vez cambiando la configuración de DNS para que resuelva automáticamente máquina a máquina.inside_domain si está afuera y usa el punto de entrada SSH.

Fernando
fuente