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.
Sommario:
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
Per avviare il demone SSH ogni volta che riavvii il computer, usa questo comando:
sudo systemctl enable sshd
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]
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.
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
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
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”.
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
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.
Le tue chiavi SSH verranno generate.
Dobbiamo trasferire la chiave pubblica al computer locale. Usa questo comando:
ssh-copy-id [email protected]
Ti verrà richiesta la password per l’account utente a cui stai effettuando l’accesso, in questo caso, [email protected].
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.
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.