Come creare il tunnel ssh usando netcat?

5

Voglio creare una connessione inversa tra due macchine, ma si tratta di un firewall nel mezzo che impedisce tutte le connessioni, ad eccezione di ssh. Voglio creare ssh tunnel usando netcat, potresti dirmi come farlo?

    
posta user1028 22.09.2012 - 18:26
fonte

3 risposte

2

Non è necessario creare un tunnel SSH per fare ciò: tutto ciò che devi fare è far sì che NetCat parli sulla porta 22, poiché è probabile che stia bloccando tutto il firewall.

man nc dovrebbe darti tutte le informazioni di cui hai bisogno.

    
risposta data 22.09.2012 - 18:52
fonte
11

Che succede? Ecco la carne e le patate:

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

Si presume che sshd sia in ascolto sulla casella remota, che penso di poter dedurre dal tuo post.

Ok! Quindi ssh viene passato -f , che lo circonda solo dopo che la connessione è stata effettuata e -L . Ricordo -L come "Link". Crea un tunnel, collegando una porta localmente a una porta sull'host remoto (rispettivamente localport:localaddress e :remoteport user@remoteaddress parti).

Quindi ssh sta raggiungendo e tenendosi per mano con sshd sull'host remoto (per 10 secondi, comunque), ed è seduto localmente con la mano tesa in attesa che qualcos'altro si aggrappi. Quindi abbiamo nc localaddress localport . Et voilà!

È garantito che l'unica linea in alto non faccia nulla, tranne stabilire una connessione e quindi eseguire sleep 10 sulla casella remota. Ecco un esempio più pratico, completamente ganked da questo articolo.

## 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, per creare questa connessione in "reverse", devi solo, lo sai, fare il contrario. Backwords, se vuoi. Fammi sapere come funziona!

Oh si, anche: nc non si legherà a 22 perché il sé privilegiato di sshd è già seduto lì. Quindi l'uso di porte arbitrarie al di fuori dell'intervallo di porte riservate (ad esempio qualsiasi cosa sopra la porta 1024). Poiché 22 è una delle porte riservate, dovresti essere root per collegarti comunque.

    
risposta data 22.09.2012 - 20:28
fonte
1

Accanto al post originale, hai scritto che non hai accesso root ai computer e che c'è già un demone in ascolto sulla porta 22.

Nel caso tu sia nel gruppo sudoers, la soluzione di nothankyou è quella con cui andare:

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

Se non lo fai, ma in qualche modo (: O) hai accesso a iptables (o simili) sulla macchina con SSH già in esecuzione, prova a reindirizzare solo l'ip dell'altro computer a un'altra porta locale dove ascolterai con NC:

Per prima cosa, ascolta usando il codice quotato o semplicemente usando NC:

nc -l -p 1234

Secondo reindirizzare il traffico in entrata alla porta 1234 in caso di un indirizzo IP di origine familiare:

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

Nel caso ragionevolmente in cui non si ha sia un qualche tipo di accesso di root e l'accesso alle regole del firewall locale, è possibile che i processi non di root si leghino a porte "privilegiate" (< 1024) su Linux , usa la seguente linea per farlo:

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

controlla questa domanda da StackOverflow per ulteriori informazioni. Potrebbe non risolvere tutti i tuoi problemi ma sembra un buon suggerimento finché non ci fornirai una descrizione migliore del tuo problema.

    
risposta data 22.09.2012 - 23:37
fonte

Leggi altre domande sui tag