Aggiunta di port forwarding a livello di programmazione su una sessione SSH ControlMaster


9

Ho appena scoperto la funzione ControlMaster / ControlPath di OpenSSH, che consente di utilizzare una singola connessione SSH per eseguire più terminali.

Poiché utilizzo spesso SSH per utilizzare il port forwarding per ottenere sessioni VNC crittografate e autenticate, ho immediatamente riconosciuto che non è possibile aggiungere port forwarding a un server remoto a cui si è già stabilita una connessione. Questo fa schifo.

Qualche volta dopo ho scoperto che puoi aggirare questa limitazione digitando ~ C in una sessione terminale SSH in esecuzione. Ciò apre una riga di comando che consente di aggiungere o rimuovere i port forwarding.

La mia domanda ora è: come posso aggiungere i port forwarding su una sessione SSH esistente che utilizza la funzione ControlMaster / ControlPath, senza la necessità di avere accesso a una sessione terminale all'interno di quella sessione SSH. Ho bisogno di questo per abilitare il mio script che avvia una connessione VNC tunnelizzata sicura per poter aggiungere e successivamente rimuovere i suoi port forwarding.

(So ​​che potrei usare un multiplexer terminale come GNU Screen o tmux, in realtà lo sto già facendo. Ma mi piace l'idea di usare solo una sessione SSH per ragioni serverali.)


1
Sarò sconvolto nel vedere se trovi un modo per farlo, ma sospetto che non lo farai. Il controllo programmatico delle proprietà di una sessione SSH di cui non fai parte sembra un grosso problema di sicurezza.
Caleb,

1
Senza senso! In che modo il controllo programmatico delle proprietà di una sessione SSH introduce un enorme problema di sicurezza? La soluzione è davvero molto semplice: serverfault.com/a/340361/93109
aculich,

La domanda ora sta solo chiedendo di aggiungere il port forwarding in modo che corrisponda meglio alla risposta accettata. Ho fatto una domanda su come rimuoverli in seguito qui: serverfault.com/q/457295/50950
aef

Risposte:


9

È abbastanza semplice, in realtà. Aggiungi semplicemente ctl_cmd -O forwardal tuo comando esistente, quindi:

ssh -M -L5555:localhost:22 remotehost

diventa:

ssh -O forward -M -L5555:localhost:22 remotehost

La sshpagina man discute l' -O ctl_cmdopzione:

-O ctl_cmd
        Control an active connection multiplexing master process.  When the -O option is
        specified, the ctl_cmd argument is interpreted and passed to the master process.
        Valid commands are: “check” (check that the master process is running), “forward”
        (request forwardings without command execution), “exit” (request the master to
        exit), and “stop” (request the master to stop accepting further multiplexing
        requests).

Questo, ovviamente, presuppone che tu sia abilitato ControlMaster yesnel tuo ~/ssh/configfile o -Mdalla riga di comando.


1
Potresti provare a rispondere alla domanda correlata qui: serverfault.com/q/457295/50950
aef
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.