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 [email protected]

entonces en 100.100.100.100,

ssh [email protected]

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:

[email protected]

He probado lo siguiente:

ssh -L 22:localhost:22 [email protected]

sin éxito

tom91136
fuente

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 [email protected] -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).

MadHatter apoya a Monica
fuente
¡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 [email protected]; ¿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 [email protected] ssh [email protected]

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.

Jeff Strunk
fuente
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.

liori
fuente
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
empaquetador
fuente
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.

arantius
fuente