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/config
archivo, 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 mycomputer
solo 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/config
puede 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
exec
criterio paraMatch
el 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 1
onc
parecí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.Match
que no tengaElse
)ssh xyz.com
miMatch 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 !exec
está causando que ssh'ing a otros dominios activeMatch !exec
y reescriba el HostName.~/.ssh/config
no 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 queMatch
tiene 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!exec
y 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
nc
dándole la-G 1
opción (tiempo de espera de conexión 1s), y puede utilizar el siguiente comportamiento para evitar la invocación múltiple denc
https://www.freebsd.org/cgi/man.cgi?sshd_config(5)
fuente
No; si especifica varios
HostName
s para unaHost
entrada, solo se reconocerá la primera:fuente
ssh mycomputer
no debería ser ambiguo a qué computadora me estoy conectando.