Lo ~/.ssh/config
configuré con varios hosts accesibles a través de la VPN de nuestra empresa o mediante un servidor proxy SSH.
Por el momento solo tengo
Host internal-server
ProxyCommand ssh -W internal.ip:22 external-server
Sin embargo, si estoy en la red interna, puedo acceder directamente a la IP interna, por lo que el proxy a través del servidor externo solo agrega un retraso a la conexión.
¿Hay alguna manera de que pueda proxy provisionalmente si no se puede acceder a la IP interna y conectarme directamente de lo contrario?
%
personaje. Podrías usar cualquier cosa realmente. El porcentaje se usa ya que no es válido en un nombre de host o nombre de usuario. Elcut
comando dentro del ProxyCommand usa%
como delimitador para extraer el nombre de host.ssh targetH
, es decir, objetivo desde casa . Si está en una red local para apuntar, simplementessh target
. Sin embargo, hubiera sido bueno tener esto más claro en la respuesta.Yo uso un método diferente usando Match. En mi caso, quiero usar un proxy local si se está ejecutando, o no, si no es así. La siguiente directiva logra esto muy bien:
Coincide con cada intento de ssh, y ejecuta una comprobación rápida usando
nc
para ver si mi proxy está funcionando en 1086 (en cuyo caso, senc
cierra sin errores). Si eso sucede, establece el ProxyCommand.fuente
Hace una década escribí un comando proxy para este tipo de escenario. En su caso de uso, mi comando proxy podría usarse así:
Un par de advertencias: me da un poco de vergüenza admitir que no maneja IPv6 y que solo intentará una única dirección IP por nombre de host. Además, no transferirá el banner del cliente al servidor antes de que se haya enviado el banner del servidor. Pero es poco probable que cause problemas.
fuente
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 usasPero
UserKnownHostsFile
aún así grabará comoA.com
Para que pueda agregar un dominio "auto" a su
ssh_config
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.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:
Intentará conectarse
1.1.1.1
, si falla intente conectarse2.2.2.2
, y luego3.3.3.3
.fuente
Esto funciona un poco más automágicamente con un pequeño retraso adicional de 1 segundo si no está detrás del firewall y este no rechaza:
fuente
Normalmente crearía otra entrada como esta:
Luego invoque el que desee, dependiendo de su entorno proxy actual.
fuente