pasar parámetros al reenvío de puerto ssh remoto

pasar parámetros al reenvío de puerto ssh remoto

Tengo un servidor remoto que está detrás de dos puertas de enlace como se muestra en la figura. gw1está abierto al mundo exterior mientras que gw2solo es accesible desde gw1. ServerSolo se puede acceder desde gw2uno de varios servidores posibles y puede ser uno de ellos. Quiero configurar el reenvío de puertos sshde modo que 443desde mi máquina cliente se reenvíe automáticamente 2000a gw1. Este no es el problema. Tengo:

HostName gw1
User user
ForwardAgent yes
LocalForward 443 localhost:2000

Y esto funciona perfectamente. Ahora quiero 2000que gw1se me reenvíe 443a Servertravés gw2de cuando lo sshhaga gw2. Puedo hacer:

HostName gw2
LocalForward 2000 Server:443

¿Hay alguna forma de que pueda pasar la IP del servidor como parámetro ya que puede ser diferente cada vez?

configuración de la red

Respuesta1

Supongamos que no le importa el puerto 2000. Su objetivo en realidad es simplemente reenviar el puerto 443 del cliente al servidor. Y supongamos que tiene hosts servidor1, servidor2, servidor3, ... en la función de servidor. Si agrega esto a su .ssh/config:

Match host server*
ProxyCommand ssh gw1 nc gw2 22
LocalForward 443 %h:443

Luego, por ejemplo, ssh server1se conectará a través de gw1 a gw2 y reenviará 443 desde allí al servidor1.

Qué hace esto: le ProxyCommanddice a ssh que se conecte primero a gw1 y canalice la salida estándar a nc gw2 22, que reenvía esa transmisión a gw2 en el puerto 22. Eso crea un túnel para la entrada estándar en el cliente a través de gw1 a gw2:22. ssh luego abre una segunda sesión ssh a través de ese túnel hasta gw2. Una vez establecido, LocalForwardreenvía el puerto 443 al servidor1 ( %hsiendo el nombre de host que proporcionó en la línea de comando).

Consulte man ssh_config para leer sobre Match y ProxyCommand.

Tenga en cuenta que, aunque el comando es ssh server1, en realidad solo conecta ssh hasta gw2 y luego simplemente reenvía el puerto 443 desde allí. Se abriría un shell en gw2, no en el servidor1. Por lo tanto, es posible que desee ejecutar ssh -N server1en su lugar, para evitar abrir el shell, ya que el objetivo en realidad es simplemente reenviar el puerto. Desafortunadamente, no hay un equivalente de -N en .ssh/config, pero podría agregar algo como LocalCommand waitpara lograr lo mismo: el shell simplemente esperaría hasta que se interrumpiera y no habría ningún indicador de shell.

información relacionada