Cree túneles SSH usando cualquier software

Cree túneles SSH usando cualquier software

Actualmente, tenemos algunos laboratorios donde todas las instancias están en una subred privada, excepto Bastion VM. Por lo tanto, se supone que los desarrolladores deben crear un túnel SSH desde su computadora portátil hasta Bastion y crear otro túnel desde Bastion hasta algún microservicio, para que puedan acceder a la interfaz de usuario.

El proceso se ve así:

ssh -i <key>.pem -L <port x>:localhost:<port x> user@<hostname of Bastion>
User logged in to Bastion VM.

ssh -i <key>.pem -L <port x>:<hostname of microservice>:<port of microservice> user@<hostname of microservice>
Now they are able to access UI at http://localhost:<port x>

Ahora bien, esta es una tarea bastante compleja y que requiere mucho tiempo para el uso diario, por lo que estaba pensando en configurar un software que pueda configurarse para hacer lo mismo con un solo clic.

Lo descubríTuberías seguras, pero no estoy seguro de cómo usarlo para mi propósito. ¿Alguien puede sugerir una alternativa para lograr lo anterior utilizando algún otro software?

Respuesta1

Es complejo porque lo estás haciendo de una manera compleja. OpenSSH ya cuenta con mecanismos para simplificar este tipo de conexiones frecuentes. (Nota:Esta publicación supone que el desarrollador tiene claves privadas paraambosconexiones en la máquina local, es decir, el host bastión no contiene algunas credenciales que no se puedan copiar).

Primero encuentre una manera de comprimirlo en un comando SSH. En realidad, esto invierte ligeramente el túnel, ya que el host bastión ahora transmite la conexión SSH y no las conexiones web.

ssh -i <key>.pem -o ProxyCommand="ssh -i <key>.pem -W %h:%p user@<bastion>" -L <portX>:<microservice>:<mport> user@<hostname>

En versiones muy recientes de OpenSSH, se puede simplificar aún más usando -J/ JumpHosten lugar del ProxyCommand manual:

ssh -i <key>.pem -J user@<bastion> -L <portX>:<microservice>:<mport> user@<hostname>

Ahora convierta esto a opciones ~/.ssh/config: identifique aquellas que son necesarias para conectarse al host bastión, aquellas que se aplican a los hosts del servicio y aquellas que son comunes a todos ellos (las secciones 'Host' aceptan múltiples nombres e incluso comodines):

Host <bastion>
    User <user>
    IdentityFile <key>.pem

Host <hostname>
    User <user>
    IdentityFile <key>.pem
    #JumpHost <bastion>
    ProxyCommand ssh -W %h:%p <bastion>

Teniendo esto en su lugar (que puede implementarse de forma centralizada), su comando se convierte en simplemente:

ssh -L <portX>:<microservice>:<mport> <hostname>

(También hay una manera de agregar automáticamente el dominio de la empresa, por ejemplo, si el servidor se llama svc1.dev.example.com, entonces Hostname %h.dev.example.como CanonicalDomains dev.example.comle permitirá ejecutar ssh svc1).

Eso es lo más simple que puede ser un método genérico: los cuatro parámetros restantes son inherentemente variables (dependiendo de las necesidades de cada desarrollador), por lo que incluso si coloca una interfaz de usuario gráfica encima, el usuario deberá proporcionar la misma cantidad de información. (Funciona con OpenSSH en cualquier sistema operativo).

Dicho esto, si elmismoLos túneles se establecen cada vez, también se pueden codificar en ~/.ssh/config ( -Lcorresponde a LocalForward), y el desarrollador solo necesita ejecutarlo ssh <hostname>.

(Prácticamente cualquier sistema operativo capaz de ejecutar OpenSSH también admite scripts, generalmente escritos en sh/bash, y/o alias de comandos).

información relacionada