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?
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.
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.