Me encanta explicar este tipo de cosas a través de la visualización. :-)
Piense en sus conexiones SSH como tubos. Tubos grandes Normalmente, alcanzará 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 tiene la gran conexión SSH, pero la opción -L o -R le permite configurar un tubo más pequeño dentro de ella.
Cada tubo tiene un principio y un final. El gran tubo, 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 la función de "inicio" o "fin" está determinada por si los usó -L
o -R
(respectivamente) para crearlos.
(No lo ha dicho, pero voy a suponer que la máquina "remota" que ha mencionado, 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 al que se entregará. La -L
opción le dice al túnel que responda en el lado local del túnel (el host que ejecuta su cliente). La -R
opción le dice al túnel que responda en el lado remoto (el servidor SSH).
Entonces ... Para poder SSH desde Internet en una máquina detrás de un firewall, necesita la máquina en cuestión para abrir una conexión SSH al mundo exterior e incluir un -R
túnel cuyo punto de "entrada" sea el lado "remoto" de Su conexión.
De los dos modelos que se muestran arriba, desea el de la derecha.
Del anfitrión con cortafuegos:
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 emote. Cualquier cosa que se conecte al puerto 22222 en el extremo más alejado del túnel alcanzará realmente el "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 ejecute en segundo plano una vez que se autentica, para que no tenga que sentarse a ejecutar algo en el servidor remoto para que el túnel permanezca vivo.
-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, entonces incluir esta opción ahorra recursos.
-T
deshabilita la asignación de pseudo-tty, lo cual es apropiado porque no está intentando 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 desechable (no su propio inicio de sesión) que configuró solo para este túnel / cliente / servidor.
Ahora, desde su caparazón en su publichost , establezca una conexión con el host con cortafuegos a través del túnel:
ssh -p 22222 username@localhost
Obtendrá un desafío clave de host, ya que probablemente nunca haya golpeado este host antes. Luego obtendrá un desafío de contraseña para la username
cuenta (a menos que haya configurado claves para iniciar sesión sin contraseña).
Si va a acceder a este host de forma regular, 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
adaptar. El remoteusername
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 que se pueda resolver.
(Para exponer el punto final inverso en una IP no localhost , consulte esta publicación )