youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
Dopo:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
Quello che potresti fare è questo: nel passaggio 1 inoltra una porta remota dal PC dell'ufficio al server ( 12345
viene utilizzato come esempio, qualsiasi porta> 1024 dovrebbe fare). Ora la connessione a 12345 sul server dovrebbe connetterti alla porta 22 su officepc.
Nel passaggio 2, inoltrare la porta 23456 dal computer di casa al 12345 sul server (da cui viene inoltrato a officepc: 22, come impostato nel passaggio 1)
Al passaggio 3, ci si collega alla porta locale 23456 con l'accesso al PC dell'ufficio . Questo viene inoltrato dal passaggio 2 alla porta 12345 sul server e dal passaggio 1 al PC dell'ufficio.
Nota che sto usando autossh per gli inoltri, in quanto è un wrapper ssh che ricollega automaticamente il tunnel in caso di disconnessione; comunque anche il normale ssh funzionerebbe, purché la connessione non cessi.
Esiste una possibile vulnerabilità: chiunque sia in grado di connettersi a localhost: 12345 su serverpc ora può connettersi a officepc: 22 e provare ad hackerarlo. (Nota che se stai eseguendo un server SSH, dovresti comunque proteggerlo sopra le protezioni di base che sono attive di default; ti consiglio almeno di disabilitare il login di root e disabilitare l'autenticazione con password - vedi ad esempio questo )
Modifica : ho verificato questo con la stessa configurazione e funziona. GatewayPorts no
riguarda solo le porte aperte al mondo in generale, non i tunnel locali. Ecco cosa sono le porte inoltrate:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
Quindi, per quanto riguarda lo stack di rete, è tutto il traffico locale sulle rispettive interfacce di loopback (oltre alle connessioni ssh a serverpc); pertanto, GatewayPorts
non viene controllato affatto.
Esiste, tuttavia, la direttiva AllowTcpForwarding
: in tal caso no
, questa installazione non riuscirà poiché non è consentito alcun inoltro, nemmeno attraverso l'interfaccia di loopback.
Avvertenze :
se usi autossh e ssh recenti, potresti voler usare ssh ServerAliveInterval
e ServerAliveCountMax
per mantenere alto il tunnel. Autossh ha un controllo integrato, ma a quanto pare ha alcuni problemi su Fedora. -M0
lo disabilita e -oServerAliveInterval=20 -oServerAliveCountMax=3
verifica se la connessione è attiva - prova ogni 20 secondi, se fallisce 3 volte di seguito, interrompe ssh (e autossh ne crea una nuova):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
potrebbe essere utile riavviare ssh tunnel se l'inoltro fallisce, usando -oExitOnForwardFailure=yes
- se la porta è già associata, potresti ottenere una connessione SSH funzionante, ma nessun tunnel inoltrato.
~/.ssh/config
è consigliabile usare per le opzioni (e le porte), altrimenti le righe di comando diventano troppo dettagliate. Per esempio:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
Quindi è possibile utilizzare solo l'alias del server:
autossh -M0 fwdserverpc