Cos’è il tunneling SSH inverso? (e come usarlo)

  • Dave McKay

    @TheGurkha

  • July 18, 2019, 9:00am EDT
Eny Setiyowati/.com

Hai bisogno di SSH ad un computer Linux non raggiungibile? Fatevi chiamare, poi scavate quella connessione per ottenere la vostra sessione SSH remota. Ti mostriamo come.

Quando vorrai usare il tunneling SSH inverso

A volte, i computer remoti possono essere difficili da raggiungere. Il sito in cui si trovano può avere regole di firewall strette, o forse l’amministratore locale ha impostato complesse regole di Network Address Translation. Come fai a raggiungere un tale computer se hai bisogno di connetterti ad esso?

Stabiliamo alcune etichette. Il tuo computer è il computer locale perché è vicino a te. Il computer a cui stai per connetterti è il computer remoto perché si trova in un luogo diverso dal tuo.

Pubblicità

Per differenziare i computer locali e remoti utilizzati in questo articolo, il computer remoto si chiama “howtogeek” e sta eseguendo Ubuntu Linux (con finestre di terminale viola). Il computer locale si chiama “Sulaco” ed esegue Manjaro Linux (con finestre di terminale gialle).

Normalmente si dovrebbe avviare una connessione SSH dal computer locale e collegarsi al computer remoto. Questa non è un’opzione nello scenario di rete che stiamo descrivendo. Non importa quale sia lo specifico problema di rete – questo è utile ogni volta che non puoi SSH direttamente ad un computer remoto.

Ma se la configurazione di rete da parte tua è semplice, il computer remoto può connettersi a te. Questo da solo non è sufficiente per le vostre esigenze, tuttavia, perché non vi fornisce una sessione a riga di comando funzionante sul computer remoto. Ma è un inizio. Hai una connessione stabilita tra i due computer.

La risposta sta nel tunneling SSH inverso.

Che cos’è il tunneling SSH inverso?

Il tunneling SSH inverso ti permette di usare quella connessione stabilita per impostare una nuova connessione dal tuo computer locale al computer remoto.

Pubblicità

Perché la connessione originale veniva dal computer remoto a te, usarla per andare nell’altra direzione significa usarla “al contrario”. E poiché SSH è sicuro, stai mettendo una connessione sicura dentro una connessione sicura esistente. Questo significa che la tua connessione al computer remoto agisce come un tunnel privato all’interno della connessione originale.

E così arriviamo al nome “tunneling SSH inverso”

Come funziona?

Il tunneling SSH inverso si basa sul computer remoto che utilizza la connessione stabilita per ascoltare nuove richieste di connessione dal computer locale.

Il computer remoto ascolta su una porta di rete sul computer locale. Se rileva una richiesta SSH a quella porta, ritrasmette quella richiesta di connessione a se stesso, lungo la connessione stabilita. Questo fornisce una nuova connessione dal computer locale al computer remoto.

Pubblicità

È più facile da impostare che da descrivere.

Using SSH Reverse Tunneling

SSH sarà già installato sul tuo computer Linux, ma potrebbe essere necessario avviare il demone SSH (sshd) se il computer locale non ha mai accettato connessioni SSH prima.

sudo systemctl start sshd

Per far partire il demone SSH ogni volta che si riavvia il computer, usare questo comando:

sudo systemctl enable sshd

Sul computer remoto, si usa il seguente comando.

  • L’opzione -R (reverse) dice a ssh che devono essere create nuove sessioni SSH sul computer remoto.
  • Il “43022:localhost:22” dice a ssh che le richieste di connessione alla porta 43022 sul computer locale devono essere inoltrate alla porta 22 sul computer remoto. La porta 43022 è stata scelta perché è elencata come non allocata. Non è un numero speciale.
  • [email protected] è l’account utente con cui il computer remoto si connetterà sul computer locale.
ssh -R 43022:localhost:22 [email protected]

Potresti ricevere un avviso sul fatto che non ti sei mai connesso al computer locale prima. Oppure potreste vedere un avvertimento mentre i dettagli della connessione vengono aggiunti alla lista degli host SSH riconosciuti. Ciò che vedete – se c’è qualcosa – dipende dal fatto che siano mai state effettuate connessioni dal computer remoto al computer locale.

Pubblicità

Vi verrà richiesta la password dell’account che state usando per connettervi al computer locale.

Nota che quando la connessione è stata fatta il prompt dei comandi cambia da dave@howtogeek a dave@sulaco.

Siamo ora connessi al computer locale dal computer remoto. Questo significa che possiamo inviargli dei comandi. Usiamo il comando who per vedere i login sul computer locale.

who

Possiamo vedere che la persona con l’account utente chiamato dave si è collegata al computer locale, e il computer remoto si è collegato (usando le stesse credenziali utente) dall’indirizzo IP 192.168.4.25.

RELATO: Come determinare l’account utente corrente in Linux

Connettersi al computer remoto

Poiché la connessione dal computer remoto è riuscita, ed è in ascolto per le connessioni, possiamo provare a connetterci al computer remoto da quello locale.

Pubblicità

Il computer remoto è in ascolto sulla porta 43022 sul computer locale. Quindi, un po’ controintuitivamente, per fare una connessione al computer remoto, chiediamo a ssh di fare una connessione al computer locale, sulla porta 43022. Quella richiesta di connessione sarà inoltrata al computer remoto.

ssh localhost -p 43022

Ci viene richiesta la password dell’account utente, quindi ci colleghiamo al computer remoto dal computer locale. Il nostro computer Manjaro dice felicemente, “Benvenuti in Ubuntu 18.04.2 LTS”.

Nota che il prompt dei comandi è cambiato da dave@sulaco a dave@howtogeek. Abbiamo raggiunto il nostro obiettivo di fare una connessione SSH al nostro computer remoto difficile da raggiungere.

Usare SSH con le chiavi

Per rendere più conveniente la connessione dal computer remoto al computer locale, possiamo impostare le chiavi SSH.

Sul computer remoto, digita questo comando:

ssh-keygen

Pubblicità

Ti verrà richiesta una passphrase. Puoi premere Invio per ignorare le domande della passphrase, ma questo non è raccomandato. Significherebbe che chiunque sul computer remoto potrebbe effettuare una connessione SSH al tuo computer locale senza che ti venga richiesta una password.

Tre o quattro parole separate da simboli saranno una robusta passphrase.

Le tue chiavi SSH saranno generate.

Abbiamo bisogno di trasferire la chiave pubblica al computer locale. Usa questo comando:

ssh-copy-id [email protected]

Pubblicità

Ti verrà richiesta la password dell’account utente con cui stai effettuando il login, in questo caso, [email protected].

La prima volta che farai una richiesta di connessione dal computer remoto al computer locale, dovrai fornire la passphrase. Non dovrete inserirla di nuovo per le future richieste di connessione, finché la finestra del terminale rimane aperta.

RELATO: Come creare e installare chiavi SSH dalla shell di Linux

Non tutti i tunnel sono spaventosi

Alcuni tunnel possono essere oscuri e tortuosi, ma il tunneling SSH inverso non è troppo difficile da navigare se riesci a mantenere la relazione tra il computer remoto e quello locale dritta nella tua testa. Allora invertilo.

Dave McKay
Dave McKay ha usato i computer per la prima volta quando il nastro di carta perforato era in voga, e da allora ha sempre programmato. Dopo oltre 30 anni nell’industria IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera, ha lavorato come programmatore freelance, come manager di un team internazionale di sviluppo software, come project manager di servizi IT e, più recentemente, come Data Protection Officer. Dave è un evangelista di Linux e un sostenitore dell’open source.Read Full Bio ”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.