¿Cómo crear un túnel ssh usando netcat?

5

Quiero crear una conexión inversa entre dos máquinas, pero este es un servidor de seguridad en el medio que impide todas las conexiones, excepto ssh. Quiero crear un túnel ssh usando netcat, ¿podría decirme cómo hacerlo?

    
pregunta user1028 22.09.2012 - 18:26
fuente

3 respuestas

2

No necesita crear un túnel SSH para hacer esto, todo lo que necesita hacer es hacer que NetCat hable en el puerto 22, ya que eso es todo lo que probablemente estará bloqueando el firewall.

man nc debe proporcionarle toda la información que necesita.

    
respondido por el Rory Alsop 22.09.2012 - 18:52
fuente
11

¿Qué pasa? Aquí está la carne y las patatas:

nurf@sessmacheen $ ssh -f -L localport:localaddress:remoteport \ 
    user@remoteaddress sleep 10; nc localaddress localport

Suponiendo que sshd está escuchando en el cuadro remoto, lo que creo que puedo deducir de tu publicación.

Ok! Por lo tanto, ssh se pasa -f , que solo es el fondo después de que se realiza la conexión, y -L . Recuerdo -L como 'Link'. Crea un túnel, conectando un puerto localmente a un puerto en el host remoto (las partes localport:localaddress y :remoteport user@remoteaddress , respectivamente).

Así que ssh está extendiendo la mano y sosteniendo las manos con sshd en el host remoto (durante 10 segundos, de todos modos), y está sentado localmente con la mano extendida esperando que algo más se agarre. Entonces nosotros nc localaddress localport . Et voila!

Por supuesto, el liner anterior no hace nada, excepto establecer una conexión y luego ejecuta sleep 10 en el cuadro remoto. Aquí hay un ejemplo más práctico, totalmente obtenido de esto artículo.

## let's pull a back up image  over the wire!                   ##
## first we set up the image for grabbing on the remote machine ##
## by piping it to nc which then starts listening on port 9000  ##

dude@remotebox $ cat backup.ico | nc -l 9000

## and now we tunnel! locally, ssh opens up on 9001, and        ##
## connects to 9000 on the remote machine where nc is waiting   ##
## with cat, ready to go.                                       ##

nurf@sessmacheen $ ssh -f -L 9001:127.0.0.1:9000 dude@remotebox \
    sleep 10; nc 127.0.0.1 9001 | pv -b > backthatthangup.iso;

## this is pretty sweet because after nc gets done with the     ##
## connection, ssh finishes running sleep and closes it so you  ##
## don't have to fool with it.  nice and tidy.                  ##

## pv is a handy little utility that tracks data across a pipe  ##
## and will show you a progress bar and whatever else you want  ##

Naturalmente, para crear esta conexión en 'reversa', simplemente lo haces al revés. Backwords, si quieres. ¡Déjame saber cómo funciona!

Ah, sí, también: nc no se unirá a 22 porque el yo, oh-tan-privilegiado, de sshd ya está ahí sentado. Por lo tanto, el uso de puertos arbitrarios fuera del rango de puertos reservados (es decir, cualquier cosa por encima del puerto 1024). Ya que 22 es uno de los puertos reservados, tendrías que ser root para enlazarlo de todos modos.

    
respondido por el nothankyou 22.09.2012 - 20:28
fuente
1

Además de la publicación original, escribiste que no tienes acceso de root a las computadoras y que ya hay un demonio escuchando en el puerto 22.

Si está en el grupo de sudoers, la solución de nothankyou es la que acompaña:

  

sudo ssh -f -L localport: localaddress: remoteport user @ remoteaddress   dormir 10; nc localaddress localport

En caso de que no lo haga, pero de alguna manera (: O) tenga acceso a las iptables (o similares) en la máquina con SSH ya en ejecución, intente redireccionar la otra ip de la computadora a otro puerto local donde escuchará NC:

Primero, escuche usando el código entre comillas, o simplemente usando NC:

nc -l -p 1234

Segundo, redirija el tráfico entrante al puerto 1234 en caso de una dirección IP de origen familiar:

iptables -A INPUT -s <computer A's ip address> -p tcp --dport 22 -j REDIRECT --to-port 1234

En el caso razonable en el que no tiene algún tipo de acceso de root y acceso a las reglas del cortafuegos local, es posible que los procesos no root se vinculen a puertos "privilegiados" (< 1024) en Linux , usa la siguiente línea para hacerlo:

setcap 'cap_net_bind_service=+ep' /path/to/program

marque esta pregunta de StackOverflow para obtener más información. Puede que no resuelva todos sus problemas, pero parece una buena sugerencia hasta que nos brinde una mejor descripción de su problema.

    
respondido por el Boaz Tirosh 22.09.2012 - 23:37
fuente

Lea otras preguntas en las etiquetas