Sikker SSH til utilgjengelig Linux-maskin: Få den til å ringe DEG!

Trenger du tilgang til en utilgjengelig Linux-maskin?

Har du behov for å koble deg til en Linux-datamaskin som er vanskelig å nå? Med litt snedighet kan du få den til å «ringe» deg, slik at du kan etablere din egen eksterne SSH-sesjon. Her viser vi deg hvordan.

Når er omvendt SSH-tunneling nyttig?

Av og til kan det være utfordrende å få tilgang til eksterne maskiner. Kanskje nettverket de befinner seg i har strenge brannmurregler, eller kanskje lokal administratoren har satt opp avanserte nettverksadresseoversettelse konfigurasjoner. Hvordan kobler du deg til en slik maskin når du trenger det?

La oss først definere noen begreper. Datamaskinen du sitter ved, kaller vi den lokale maskinen, da den er fysisk nærme deg. Den datamaskinen du ønsker å koble deg til, er den eksterne maskinen, da den befinner seg et annet sted.

For å gjøre det enklere å skille mellom den lokale og den eksterne maskinen i denne artikkelen, refererer vi til den eksterne maskinen som «wdzwdz,» som kjører Ubuntu Linux (med lilla terminalvinduer). Den lokale maskinen heter «Sulaco» og kjører Manjaro Linux (med gule terminalvinduer).

Vanligvis oppretter man en SSH-forbindelse fra den lokale maskinen for å koble seg til den eksterne. Dette er ikke en mulighet i scenarioet vi beskriver. Uavhengig av hva som forårsaker nettverksproblemet, er dette nyttig når du ikke kan opprette en direkte SSH-forbindelse til en ekstern maskin.

Men dersom nettverkskonfigurasjonen på din side er enkel, kan den eksterne maskinen koble seg til deg. Dette er likevel ikke tilstrekkelig alene, siden det ikke gir deg en fungerende kommandolinjesesjon på den eksterne maskinen. Men det er en begynnelse. Du har nå en etablert forbindelse mellom de to maskinene.

Løsningen ligger i omvendt SSH-tunneling.

Hva er omvendt SSH-tunneling?

Omvendt SSH-tunneling lar deg benytte den opprettede forbindelsen til å etablere en ny forbindelse fra den lokale maskinen tilbake til den eksterne maskinen.

Siden den innledende forbindelsen gikk fra den eksterne maskinen til deg, kalles det å bruke den i motsatt retning «omvendt.» Og siden SSH er sikkert, plasseres en sikker tilkobling inni en allerede eksisterende sikker tilkobling. Dermed fungerer forbindelsen til den eksterne maskinen som en privat tunnel inni den opprinnelige forbindelsen.

Og det er her navnet «omvendt SSH-tunneling» kommer fra.

Hvordan fungerer det?

Omvendt SSH-tunneling er avhengig av at den eksterne maskinen bruker den etablerte forbindelsen til å lytte etter nye tilkoblingsforespørsler fra den lokale maskinen.

Den eksterne maskinen lytter på en bestemt nettverksport på den lokale maskinen. Hvis den oppdager en SSH-forespørsel til denne porten, videresender den forespørselen tilbake til seg selv via den etablerte forbindelsen. Dette resulterer i en ny forbindelse fra den lokale maskinen til den eksterne maskinen.

Det er enklere å sette opp enn å forklare.

Bruk av SSH omvendt tunnel

SSH vil mest sannsynlig allerede være installert på din Linux-maskin, men det kan hende du må starte SSH-demonen (sshd) hvis den lokale maskinen ikke har akseptert SSH-forbindelser tidligere.

sudo systemctl start sshd

For å sikre at SSH-demonen starter hver gang du starter datamaskinen, bruk denne kommandoen:

sudo systemctl enable sshd

På den eksterne maskinen bruker vi følgende kommando.

Alternativet -R (revers) forteller SSH at nye SSH-sesjoner skal opprettes på den eksterne maskinen.
«43022:localhost:22» sier til SSH at tilkoblingsforespørsler til port 43022 på den lokale maskinen skal videresendes til port 22 på den eksterne maskinen. Port 43022 ble valgt fordi den er oppført som ikke-allokert. Det er ikke et spesielt nummer.
[email protected] er brukerkontoen den eksterne maskinen skal koble seg til på den lokale maskinen.

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

Du kan få en advarsel om at du aldri har koblet til den lokale datamaskinen tidligere. Eller du kan se en melding når tilkoblingsdetaljene legges til listen over godkjente SSH-verter. Hva du ser, avhenger av om det noen gang har vært opprettet forbindelser fra den eksterne maskinen til den lokale maskinen.

Du vil bli bedt om passordet for kontoen du bruker for å koble til den lokale maskinen.

Legg merke til at når forbindelsen er etablert, endres ledeteksten fra [email protected] til [email protected]

Vi er nå koblet til den lokale maskinen fra den eksterne. Det betyr at vi kan gi kommandoer til den. La oss bruke kommandoen «who» for å se innloggingene på den lokale maskinen.

who

Vi ser at brukeren «dave» er logget på den lokale maskinen, og at den eksterne maskinen har koblet seg til (med samme brukerinformasjon) fra IP-adressen 192.168.4.25.

Koble til den eksterne maskinen

Siden forbindelsen fra den eksterne maskinen er vellykket, og den lytter etter tilkoblinger, kan vi prøve å koble oss til den eksterne maskinen fra den lokale.

Den eksterne maskinen lytter på port 43022 på den lokale maskinen. Så, litt ulogisk, for å koble til den eksterne maskinen, ber vi SSH om å opprette en forbindelse til den lokale maskinen, på port 43022. Denne forespørselen vil så videresendes til den eksterne maskinen.

ssh localhost -p 43022

Vi blir bedt om passordet til brukerkontoen, og deretter koblet til den eksterne maskinen fra den lokale. Manjaro-maskinen vår hilser oss med meldingen: «Velkommen til Ubuntu 18.04.2 LTS».

Legg merke til at ledeteksten er endret fra [email protected] til [email protected] Vi har nå nådd målet vårt med å opprette en SSH-forbindelse til vår vanskelig tilgjengelige eksterne maskin.

Bruk av SSH med nøkler

For å gjøre det mer praktisk å koble fra den eksterne maskinen til den lokale maskinen, kan vi sette opp SSH-nøkler.

Skriv inn denne kommandoen på den eksterne maskinen:

ssh-keygen

Du vil bli bedt om en passordfrase. Du kan trykke Enter for å hoppe over passordfrasespørsmålene, men dette anbefales ikke. Det ville bety at hvem som helst på den eksterne maskinen kunne opprette en SSH-forbindelse til din lokale maskin uten å måtte oppgi passord.

Tre eller fire ord adskilt med symboler vil utgjøre en sikker passordfrase.

Dine SSH-nøkler vil nå bli generert.

Vi må overføre den offentlige nøkkelen til den lokale maskinen. Bruk denne kommandoen:

ssh-copy-id [email protected]

Du vil bli bedt om passordet for brukerkontoen du logger på, i dette tilfellet, [email protected]

Første gang du sender en tilkoblingsforespørsel fra den eksterne maskinen til den lokale maskinen, må du oppgi passordfrasen. Du trenger ikke å angi den igjen for fremtidige tilkoblingsforespørsler, så lenge terminalvinduet forblir åpent.

Ikke alle tunneler er skumle

Noen tunneler kan virke mørke og vanskelige, men omvendt SSH-tunneling er ikke så komplisert å navigere dersom du holder oversikten over forholdet mellom den eksterne maskinen og den lokale maskinen. Husk deretter å snu på det.