2015-04-29 12 views
39

Sono attualmente in esecuzione un po 'di:ssh -L inoltrare più porte

sudo ssh -L PORT:IP:PORT [email protected] 

dove IP è l'obiettivo di una macchina sicura, e porta rappresenta i porti sto inoltro.

Questo perché utilizzo molte applicazioni a cui non posso accedere senza questo inoltro. Dopo aver eseguito questo, posso accedere tramite localhost:PORT.

Il problema principale si è verificato ora che ho effettivamente 4 di queste porte che devo inoltrare.

La mia soluzione è di aprire 4 shell e cercare costantemente la mia cronologia all'indietro per cercare esattamente quali porte devono essere inoltrate, ecc, e quindi eseguire questo comando - uno in ogni shell (dovendo inserire password ecc.).

Se solo potessi fare qualcosa di simile:

sudo ssh -L PORT1+PORT2+PORT+3:IP:PORT+PORT2+PORT3 [email protected] 

allora che sarebbe già di grande aiuto.

C'è un modo per rendere più facile farlo?

risposta

68

Utilizzare nuovamente l'opzione -L nello stesso comando. Ogni volta con porte diverse.

30

Esattamente ciò che ha risposto NaN, si specificano più argomenti -L. Lo faccio sempre. Ecco un esempio di port forwarding a più:

ssh remote-host -L 8822:REMOTE_IP_1:22 -L 9922:REMOTE_IP_2:22 

Nota: Questo è lo stesso come -L localhost:8822:REMOTE_IP_1:22 se non si specifica localhost.

Ora, con questo, è ora possibile (da un altro terminale) non:

ssh localhost -p 8822 

Per connettersi a REMOTE_IP_1 sulla porta 22

e allo stesso modo

ssh localhost -p 9922 

per la connessione a REMOTE_IP_2 su porta 22

Ovviamente, non c'è nulla che ti impedisca di avvolgere questo in uno script o automatizzarlo se hai molti host/porte diversi da inoltrare e alcuni specifici.

Spero che questo aiuti.

+0

Grande esempio, grazie! – jsruok

11

È possibile utilizzare la seguente funzione di bash (basta aggiungerlo al tuo ~/.bashrc):

function pfwd { 
    for i in ${@:2} 
    do 
    echo Forwarding port $i 
    ssh -N -L $i:localhost:$i $1 & 
    done 
} 

Esempio di utilizzo:

pfwd hostname {6000..6009} 
1

jbchichoko e Yuval hanno dato soluzioni praticabili. Ma la risposta di jbchichoko non è una risposta flessibile come funzione, ei tunnel aperti dalla risposta di yuval non possono essere chiusi da ctrl+c perché viene eseguito in background.Io do la mia soluzione qui di seguito risolvere entrambi i due difetti:

Defing una funzione in ~/.bashrc o ~/.zshrc:

# fsshmap multiple ports 
function fsshmap() { 
    echo -n "-L 1$1:127.0.0.1:$1 " > $HOME/sh/sshports.txt 
    for ((i=($1+1);i<$2;i++)) 
    do 
    echo -n "-L 1$i:127.0.0.1:$i " >> $HOME/sh/sshports.txt 
    done 
    line=$(head -n 1 $HOME/sh/sshports.txt) 
    cline="ssh "$3" "$line 
    echo $cline 
    eval $cline 
} 

Un esempio di esecuzione della funzione:

fsshmap 6000 6010 hostname 

Risultato di questo esempio:

È possibile accedere a 127.0.0.1:16000~16009 lo stesso di hostname:6000~6009