GNU/Linux >> Tutoriales Linux >  >> Linux

Ssh:¿cómo funciona el túnel Ssh inverso?

Según tengo entendido, los cortafuegos (asumiendo la configuración predeterminada) niegan todo el tráfico entrante que no tiene un tráfico saliente correspondiente anterior.

Basado en Invertir una conexión ssh y SSH Tunneling Made Easy, el túnel SSH inverso se puede usar para sortear las molestas restricciones del firewall.

Me gustaría ejecutar comandos de shell en una máquina remota. La máquina remota tiene su propio cortafuegos y está detrás de un cortafuegos adicional (enrutador). Tiene una dirección IP como 192.168.1.126 (o algo similar). No estoy detrás de un firewall y conozco la dirección IP de la máquina remota tal como se ve en Internet (no la dirección 192.168.1.126). Además, puedo pedirle a alguien que ejecute ssh (something) primero como root en la máquina remota.

¿Alguien podría explicarme, paso a paso, cómo funciona el túnel SSH inverso para evitar los cortafuegos (cortafuegos de máquinas locales y remotas y el cortafuegos adicional entre ellos)?

¿Cuál es el papel de los interruptores (-R , -f , -L , -N )?

Respuesta aceptada:

Me encanta explicar este tipo de cosas a través de la visualización. 🙂

Piense en sus conexiones SSH como tubos. Grandes tubos. Normalmente, llegará a través de estos tubos para ejecutar un shell en una computadora remota. El shell se ejecuta en una terminal virtual (tty). Pero ya conoces esta parte.

Piense en su túnel como un tubo dentro de un tubo. Todavía tienes la gran conexión SSH, pero la opción -L o -R te permite configurar un tubo más pequeño dentro.

Todo tubo tiene un principio y un final. El tubo grande, su conexión SSH, comenzó con su cliente SSH y termina en el servidor SSH al que se conectó. Todos los tubos más pequeños tienen los mismos puntos finales, excepto que el papel de "inicio" o "final" está determinado por si usó -L o -R (respectivamente) para crearlos.

(No lo ha dicho, pero voy a suponer que la máquina "remota" que mencionó, la que está detrás del firewall, puede acceder a Internet usando la traducción de direcciones de red (NAT). Esto es algo importante, así que corrija esta suposición si es falsa).

Cuando crea un túnel, especifica una dirección y un puerto en el que responderá, y una dirección y un puerto en el que se entregará. El -L La opción le dice al túnel que responda en el lado local del túnel (el host que ejecuta su cliente). El -R La opción le dice al túnel que responda en el lado remoto (el servidor SSH).

Así que... Para poder usar SSH desde Internet en una máquina detrás de un firewall, necesita que la máquina en cuestión abra una conexión SSH con el mundo exterior e incluya un -R túnel cuyo punto de "entrada" es el lado "remoto" de su conexión.

De los dos modelos que se muestran arriba, desea el de la derecha.

Relacionado:¿Hay alguna manera de trabajar con CollectionViews anidados en Xamarin Forms con MvvmCross?

Desde el host con firewall:

ssh -f -N -T -R22222:localhost:22 yourpublichost.example.com

Esto le dice a su cliente que establezca un túnel con un -R punto de entrada de emoticonos. Todo lo que se conecta al puerto 22222 en el otro extremo del túnel llegará al "puerto localhost 22", donde "localhost" es desde la perspectiva del punto de salida del túnel (es decir, su cliente ssh).

Las otras opciones son:

  • -f le dice a ssh que se coloque en segundo plano después de autenticarse, por lo que no tiene que sentarse a ejecutar algo en el servidor remoto para que el túnel permanezca activo.
  • -N dice que desea una conexión SSH, pero en realidad no desea ejecutar ningún comando remoto. Si todo lo que está creando es un túnel, incluir esta opción ahorra recursos.
  • -T deshabilita la asignación de pseudo-tty, lo cual es apropiado porque no está tratando de crear un shell interactivo.

Habrá un desafío de contraseña a menos que haya configurado claves DSA o RSA para un inicio de sesión sin contraseña.

Tenga en cuenta que se recomienda ENCARECIDAMENTE que utilice una cuenta descartable (no su propio inicio de sesión) que configure solo para este túnel/cliente/servidor.

Ahora, desde su shell en yourpublichost , establezca una conexión con el host con firewall a través del túnel:

ssh -p 22222 [email protected]

Obtendrá un desafío de clave de host, ya que probablemente nunca antes haya golpeado este host. Luego obtendrá un desafío de contraseña para el username cuenta (a menos que haya configurado claves para iniciar sesión sin contraseña).

Si va a acceder a este host con regularidad, también puede simplificar el acceso agregando algunas líneas a su ~/.ssh/config archivo:

host remotehostname
    User remoteusername
    Hostname localhost
    Port 22222

Ajustar remotehostname y remoteusername para adaptarse El remoteusername El campo debe coincidir con su nombre de usuario en el servidor remoto, pero remotehostname puede ser cualquier nombre de host que le convenga, no tiene que coincidir con nada resoluble.

  • Exponer el extremo inverso en un host no local IP
  • Consejos sobre el uso de ControlMaster para mantener su túnel

Linux
  1. ¿Qué es NGINX? ¿Como funciona?

  2. Cómo configurar el túnel SSH inverso en Linux

  3. ¿Cómo funciona Rm? ¿Qué hace Rm?

  4. ¿Cómo funciona realmente sig_atomic_t?

  5. ¿Cómo funciona el comando ps?

¿Cómo funciona SSH?

¿Cómo funciona Git?

¿Qué es el DNS inverso y cómo funciona?

¿Cómo funciona el intercambio de memoria en Linux?

¿Cómo funciona la interfaz de bucle invertido?

¿Cómo funciona la pantalla de Linux?