Reenviar SSH a través del túnel SSH


30

Mi situación :

Me (localhost) -> Servidor A (ip: 100.100.100.100) => (servidor B (ip: 192.168.25.100), servidor ...)

Puedo SSH en el servidor, ya que tiene una IP verdadera si luego quiero conectarme al servidor b, ssh servidor b con su ip (192.168.25.100)

ejemplo:

desde mi pc:

ssh user@100.100.100.100

entonces en 100.100.100.100,

ssh user@192.168.25.100

esto me llevaría al servidor B con ssh

¿Qué pasa si quiero conectarme al servidor b directamente? ¿Cómo puedo hacer eso?

ejemplo:

de mi oc:

ssh@192.168.25.100

He probado lo siguiente:

ssh -L 22:localhost:22 user@100.100.100.100

sin éxito

Respuestas:


30

Su problema está en vincular un oyente a localhost: 22; ya hay un sshd escuchando eso. Hacer un túnel en una conexión ssh a través de una conexión ssh es completamente legal, y lo hago todo el tiempo, pero debe elegir puertos no utilizados para sus oyentes de reenvío.

Tratar

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

luego

me% ssh localhost -p 2201

Debería terminar en el servidor B (a menos que algo ya esté vinculado a mí: 2201, en cuyo caso, elija otro puerto).


¡Gracias por la rápida respuesta! funciona, sin embargo, ¿cómo puedo reenviar todas las conexiones en lugar de solo ssh (22)?
tom91136

1
Esa es una VPN completa que estás buscando, no solo el reenvío de puertos. Hay un escrito sobre cómo hacer vpn-over-ssh en bodhizazen.net/Tutorials/VPN-Over-SSH , pero requiere acceso remoto a la raíz a través de ssh en A. O podría buscar OpenVPN u otras soluciones VPN, pero de nuevo, Necesitarás privilegio en A para que esto funcione.
MadHatter apoya a Monica el

muchas gracias, una última cosa, ¿y si solo quiero conectarme a A?
tom91136

me% ssh user@100.100.100.100; ¿Ya no cubrimos eso? o quieres decir "¿y si quiero una VPN completa para A?", en cuyo caso mi respuesta es válida.
MadHatter apoya a Monica el

1
Para las personas que desean VPN sobre SSH, no tienen acceso de root en el servidor pero sí tiene Python, intente sshuttle .
André Paramés

23

No tiene que usar el reenvío de puertos ssh para ssh en una computadora interna a través de un proxy. Puede usar la función ssh de ejecutar un comando en el primer servidor al que se conecta para ssh en una tercera computadora.

ssh -t user@100.100.100.100 ssh user@192.168.25.100

La -topción obliga a ssh a asignar un pseudo-tty para que pueda ejecutar un comando interactivo.

Esto también puede funcionar con claves ssh. Si tiene su clave pública y privada en la máquina A y su clave pública en los archivos de claves autorizados en las máquinas B y C, puede usar la -Aopción para reenviar la conexión del agente de autenticación.


10

Usé una solución diferente. Usé una ProxyCommandopción (aquí en ~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

Esto no configura ningún túnel de puerto a puerto, en su lugar túneles ssh utilizando stdin / out estándar. Este método tiene el inconveniente de que en realidad hay tres conexiones ssh para autenticar. Pero para conectarse al host interno simplemente escriba:

ssh myinsidehost2

... por lo que no necesita preocuparse por elegir ninguna IP para ese túnel.


1
Este es el único tipo de apilamiento SSH que encuentro que funciona. He sido probado corkscrewo nc( netcat) pero ninguno funciona tan bien como este.
Phuong Nguyen

7

de acuerdo con la página de manual de ssh, ProxyCommand es el método correcto

la sintaxis es:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

No estoy seguro de que la -Wopción existiera cuando se respondió esta pregunta. Pero con las versiones más recientes del cliente ssh, estoy de acuerdo en que la combinación de ProxyCommandy -Wes el método preferido. Tal vez agregue algo de contexto que muestre cómo se puede usar en la línea de comando, así como un ejemplo de una sección para .ssh/config.
kasperd

¿Alguna idea de dónde encontrar los registros de cambios / información de versión que nos dice qué versiones de SSH tienen el -Wcomando y cuáles no? Un poco de búsqueda en Google no me dio respuestas rápidamente ...
dmh

-Wse introdujo con OpenSSH 5.4, lanzado en 2010. Entonces la respuesta es sí @kasperd
0xC0000022L

7

A partir de OpenSSH 7.3 (finales de 2016), la forma más fácil es la configuración de ProxyJump . En su ~/.ssh/config:

Host B
  ProxyJump A

O en la línea de comando,, -J B.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.