Gracias por la respuesta de @ till , me inspiró mucho.
Descubrí que puedes redirigir tu conexión con fuerza ProxyCommand nc dst dst-port
.
Por ejemplo, de hecho te conectarás B.com
si usas
ssh A.com -o ProxyCommand="nc B.com 22"
Pero UserKnownHostsFile
aún así grabará comoA.com
Para que pueda agregar un dominio "auto" a su ssh_config
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c '(timeout 0.1 nc -z %h %p) && nc %h %p || ssh -W %h:%p external-server'
Reemplacé nc -w 1 %h %p
con (timeout 0.1 nc -z %h %p) && nc %h %p
, será más rápido si pudiera alcanzar el servidor interno a menos de 100 ms.
O puede reemplazarlo por ping
, pero puede indicar información incorrecta si utiliza un proxy basado en TCP comoproxychains
, o el servidor no permite un eco ICMP.
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c '(ping %h &>/dev/null) && nc %h %p || ssh -W %h:%p external-server'
Puede reemplazarlo (timeout 0.1 nc -z %h %p)
por cualquier cosa que detecte si está en un servidor interno.
Si tiene varias IP candidatas, incluso puede usar esto:
Host auto.internal-server
Hostname {internal-server ip or domain}
ProxyCommand bash -c 'f(){(timeout 0.1 ping -c 1 $1 &>/dev/null) && nc $1 %p;}; f 1.1.1.1 || f 2.2.2.2 || f 3.3.3.3'
Intentará conectarse 1.1.1.1
, si falla intente conectarse 2.2.2.2
, y luego 3.3.3.3
.