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

Hai bisogno di SSH su un computer Linux non raggiungibile? Fatti chiamare, quindi scava quella connessione per ottenere la tua sessione SSH remota. Ti mostriamo come.

Quando vorrai utilizzare il tunneling SSH inverso

A volte, i computer remoti possono essere difficili da raggiungere. Il sito in cui si trovano potrebbe avere rigide regole del firewall o forse l’amministratore locale ha impostato complesse Traduzione degli indirizzi di rete regole. Come si raggiunge un computer del genere se è necessario collegarsi ad esso?

Stabiliamo alcune etichette. Il tuo computer è il computer locale perché è vicino a te. Il computer a cui ti connetti è il computer remoto perché si trova in una posizione diversa da te.

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

Normalmente avvieresti un file Connessione SSH dal computer locale e connettersi al computer remoto. Questa non è un’opzione nello scenario di rete che stiamo descrivendo. Non importa quale sia il problema specifico della rete: questo è utile ogni volta che non è possibile accedere tramite SSH direttamente a 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 tue esigenze, tuttavia, perché non ti fornisce una sessione della riga di comando funzionante sul computer remoto. Ma è un inizio. Hai stabilito una connessione tra i due computer.

La risposta sta nel tunneling SSH inverso.

Che cos’è il tunneling SSH inverso?

Il tunneling SSH inverso consente di utilizzare la connessione stabilita per impostare una nuova connessione dal computer locale al computer remoto.

Poiché la connessione originale proveniva dal computer remoto a te, usarla per andare nella direzione opposta significa usarla “al contrario”. E poiché SSH è sicuro, stai inserendo una connessione sicura all’interno di una connessione protetta esistente. Ciò 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 è in ascolto su una porta di rete del computer locale. Se rileva una richiesta SSH su quella porta, ritrasmette la richiesta di connessione a se stesso, in fondo alla connessione stabilita. Ciò fornisce una nuova connessione dal computer locale al computer remoto.

È più facile da configurare che da descrivere.

Utilizzando SSH Reverse Tunneling

SSH sarà già installato sul tuo computer Linux, ma potresti dover avviare il daemon SSH (sshd) se il computer locale non ha mai accettato connessioni SSH prima.

sudo systemctl start sshd

sudo systemctl avvia sshd in una finestra di terminale

Per avviare il demone SSH ogni volta che riavvii il computer, usa questo comando:

sudo systemctl enable sshd

sudo systemctl abilita sshd in una finestra di terminale

Sul computer remoto, utilizziamo il seguente comando.

L’opzione -R (inversa) dice a ssh che le nuove sessioni SSH devono essere create sul computer remoto.
“43022: localhost: 22” indica 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é lo è elencato come non allocato. Non è un numero speciale.
[email protected] è l’account utente a cui il computer remoto si connetterà sul computer locale.

ssh -R 43022:localhost:22 [email protected]

ssh -R 43022: localhost: 22 dave@sulaco.local in una finestra di terminale

Potresti ricevere un avviso di non esserti mai connesso al computer locale prima. Oppure potresti visualizzare un avviso quando i dettagli della connessione vengono aggiunti all’elenco degli host SSH riconosciuti. Quello che vedi, semmai, dipende dal fatto che le connessioni siano mai state effettuate dal computer remoto al computer locale.

Ti verrà richiesta la password dell’account che stai utilizzando per connetterti al computer locale.

Dettagli della connessione SSH in una finestra di terminale

Notare che quando la connessione è stata stabilita, il prompt dei comandi cambia da dave @ howtogeek a dave @ sulaco.

Ora siamo connessi al computer locale dal computer remoto. Ciò significa che possiamo impartirgli dei comandi. Usiamo il comando who per vedere gli accessi sul computer locale.

who

il comando who in una finestra di terminale

Possiamo vedere che la persona con l’account utente chiamato dave ha effettuato l’accesso al computer locale e il computer remoto si è connesso (utilizzando le stesse credenziali utente) dall’indirizzo IP 192.168.4.25.

Collegamento al computer remoto

Poiché la connessione dal computer remoto ha esito positivo e sta ascoltando le connessioni, possiamo provare a connetterci al computer remoto da quello locale.

Il computer remoto è in ascolto sulla porta 43022 del computer locale. Quindi, in modo un po ‘controintuitivo, per effettuare una connessione al computer remoto, chiediamo a ssh di effettuare una connessione al computer locale, sulla porta 43022. Quella richiesta di connessione verrà inoltrata al computer remoto.

ssh localhost -p 43022

ssh localhost -p 43022 in una finestra di terminale

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

connessione tunnel ssh inversa al computer remoto

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

Utilizzo di SSH con le chiavi

Per rendere più comodo il collegamento dal computer remoto al computer locale, possiamo configurare le chiavi SSH.

Sul computer remoto, digita questo comando:

ssh-keygen

ssh-keygen in una finestra di terminale

Ti verrà richiesta una passphrase. È possibile premere Invio per ignorare le domande della passphrase, ma non è consigliabile. Significherebbe che chiunque sul computer remoto potrebbe stabilire una connessione SSH al tuo computer locale senza essere sfidato per una password.

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

generazione di chiavi ssh in una finestra di terminale

Le tue chiavi SSH verranno generate.

Dobbiamo trasferire la chiave pubblica al computer locale. Usa questo comando:

ssh-copy-id [email protected]

ssh-copy-id dave@sulaco.local in una finestra di terminale

Ti verrà richiesta la password per l’account utente a cui stai effettuando l’accesso, in questo caso, [email protected].

trasferire le chiavi SSH al computer locale in una finestra di terminale

La prima volta che effettui una richiesta di connessione dal computer remoto al computer locale, dovrai fornire la passphrase. Non sarà necessario reinserirlo per future richieste di connessione, fintanto che la finestra del terminale rimane aperta.

finestra di dialogo richiesta passphrase

Non tutti i tunnel fanno paura

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