Diferencia entre revisiones de «Tunneling Vía SSH»

De FJWiki
Saltar a: navegación, buscar
(Página nueva: == Motivación == ¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos ser...)
 
Línea 17: Línea 17:
  
 
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.
 
La opción <tt>-R</tt> nos permite crear un puente entre el puerto remoto <tt>port</tt> hacia <tt>host:hostport</tt> abierto desde el cliente.
 +
 +
== Ejemplos ==
 +
 +
=== Caso 1: Permitir entrada externa a una máquina detrás de un proxy ===
 +
 +
Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos entrar desde una máquina externa "C".
 +
 +
<source>
 +
+-+                              +-+
 +
|A| ---> Proxy <--> internet <--> |C|
 +
+-+                              +-+
 +
</source>
 +
 +
En "A" podría ejecutarse el siguiente comando:
 +
 +
<source>
 +
[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C
 +
</source>
 +
 +
Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:
 +
<source>
 +
[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino
 +
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1
 +
</source>
 +
 +
Hay que tener en cuenta que al no especificar el <tt>bind_address</tt> en la opción <tt>-R</tt> se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.
  
 
[[Category:Tips]]
 
[[Category:Tips]]

Revisión del 16:09 28 abr 2009

Motivación

¿Cuántas veces hemos necesitado conectarnos a máquinas detrás de proxys en forma directa? ¿Sólo hay salida de algunos puertos y se necesitan pasar algunos servicios extra en un momento particular? Estas cuestiones se pueden resolver fácilmente con SSH, que usando la implementación de OpenSSH permite hacer túneles de puertos específicos hacia hosts específicos. Para hacer un proxy "genérico" pueden ver Proxy Vía SSH.

Sintáxis

La sintaxis que necesitamos conocer del SSH necesaria para el tunneling es la siguiente (sacada del man ssh(1)):

# ssh [-p port]
      [-L [bind_address:]port:host:hostport]
      [-R [bind_address:]port:host:hostport]
      [user@]hostname [command]

La opción -p nos permite especificar un puerto de conexión de ssh distinto al estándar.

La opción -L nos permite crear un puente entre el puerto local port (siempre visto desde el cliente) hacia host:hostport abierto en el servidor ssh.

La opción -R nos permite crear un puente entre el puerto remoto port hacia host:hostport abierto desde el cliente.

Ejemplos

Caso 1: Permitir entrada externa a una máquina detrás de un proxy

Digamos que estamos en "A", en una red privada detrás de un "proxy" (o gateway, o lo que hubiera), y necesitamos entrar desde una máquina externa "C".

+-+                               +-+
|A| ---> Proxy <--> internet <--> |C|
+-+                               +-+

En "A" podría ejecutarse el siguiente comando:

[usuarioA@A ~]$ ssh -R 8022:localhost:22 usuarioC@C

Esto permitirá que desde C se pueda ejecutar lo siguiente para copiar archivos o loguearse vía ssh en A:

[usuarioC@C ~]$ scp -P 8022 /origen usuarioA@127.0.0.1:/destino
[usuarioC@C ~]$ ssh -p 8022 usuarioA@127.0.0.1

Hay que tener en cuenta que al no especificar el bind_address en la opción -R se está abriendo el puerto remoto sólo en "localhost". Además, si se quieren abrir puertos privilegiados hay que tener los privilegios de root o que la configuración del sshd permita eso.