He configurado el reenvío de puertos ssh y de enrutador para poder ssh en una computadora en mi red doméstica cuando no estoy en casa. Actualmente tengo dos entradas en mi .ssh/configarchivo, una para cuando estoy en mi red doméstica y otra para cuando no estoy:
Host mycomputer
HostName 192.168.X.X
Host mycomputerathome
HostName my.no-ip.dynamic
Esto funciona, pero me pregunto si puedo facilitarme las cosas. Esperaba que haya una manera de enumerar múltiples entradas de HostName de modo que si el primero falla, vuelva al segundo:
Host mycomputer
HostName 192.168.X.X
HostName my.no-ip.dynamic
Por lo tanto, primero intentará conectarse a un host en mi red local y, si no está presente, intentará conectarse utilizando mi nombre de host dinámico sin IP. Intenté ingresar dos HostNames, pero ejecuté ssh mycomputersolo bloques sin hacer nada.
Desactivé la autenticación de contraseña a favor de las claves, por lo que conectarme accidentalmente a una computadora en la red local cuando no estoy en mi red doméstica no debería arriesgar mi contraseña a ningún otro lugar.
¿Es posible especificar HostNames alternativo para probar si el primero no funciona?

.ssh/configpuede ejecutar scripts para ciertas propiedades. Sé que puedes con ProxyCommand. Puede hacer algo como se muestra en estas preguntas y respuestas de SF - serverfault.com/questions/401233/… .Respuestas:
Es feo, pero creo que podría hacerlo utilizando el
execcriterio paraMatchel estado de salida de un puerto, p. Ej.Tenga en cuenta que esto realmente no puede decir si está en "su" red doméstica, solo que está en un segmento de LAN privada con el mismo rango de direcciones que tiene un servicio que escucha en la misma dirección / puerto.
fuente
-w 1oncparecía esperar para siempre. Lo que podría ser más simple es que el segundo partido puedeMatch exec "true"porque si el primer partido falla, simplemente prueba ciegamente la segunda opción.Matchque no tengaElse)ssh xyz.commiMatch exec "true"capturado ese y me redirige a mi servidor usando mi nombre del ordenador remoto. Intentaré con tu ejecutivo, pero creo que sucederá lo mismo.Match exec... Match !execestá causando que ssh'ing a otros dominios activeMatch !execy reescriba el HostName.~/.ssh/configno podría importarle menos la sangría. Ciertos comandos restablecen el alcance, es decir, cada nueva línea de Host dice "las líneas anteriores eran para el Host anterior, las siguientes líneas son para este nuevo Host". Resulta queMatchtiene la misma potencia de "restablecimiento del alcance" que el Host. Para dar cuenta de esto, reemplacé mi línea de Host conMatch Host mycomputer exec "nc -w 1 -z 192.168.X.X 22"y definí todos los valores personalizados para mi red local. Luego agregué una línea coincidente excepto!execy agregué todos los valores para cuando estoy fuera de la red. Ahora funciona bien para todos los hosts.Estoy usando así.
ssh_config no tiene algo como el bloque de sangría. Si desea limitar la oración de coincidencia a un host específico, entonces debe describir la condición completa.
Puede evitar la espera prolongada
ncdándole la-G 1opción (tiempo de espera de conexión 1s), y puede utilizar el siguiente comportamiento para evitar la invocación múltiple denchttps://www.freebsd.org/cgi/man.cgi?sshd_config(5)
fuente
No; si especifica varios
HostNames para unaHostentrada, solo se reconocerá la primera:fuente
ssh mycomputerno debería ser ambiguo a qué computadora me estoy conectando.