Hvad er omvendt SSH-tunneling? (og hvordan du bruger det)

  • Dave McKay

    @TheGurkha

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

Har du brug for SSH til en Linux-computer, som du ikke kan nå? Få den til at ringe til dig, og grav dig derefter ned i den forbindelse for at få din egen SSH-session på afstand. Vi viser dig hvordan.

Når du vil bruge Reverse SSH Tunneling

Sommetider kan fjerncomputere være svære at nå. Det sted, de befinder sig på, kan have stramme firewallregler, eller måske har den lokale administrator opsat komplekse Network Address Translation-regler. Hvordan kan du nå en sådan computer, hvis du har brug for at oprette forbindelse til den?

Lad os opstille nogle etiketter. Din computer er den lokale computer, fordi den befinder sig i nærheden af dig. Den computer, du vil oprette forbindelse til, er fjerncomputeren, fordi den befinder sig et andet sted end dig.

Annonce

For at skelne mellem de lokale og fjerncomputere, der anvendes i denne artikel, hedder fjerncomputeren “howtogeek” og kører Ubuntu Linux (med lilla terminalvinduer). Den lokale computer hedder “Sulaco” og kører Manjaro Linux (med gule terminalvinduer).

Normalt ville du fyre en SSH-forbindelse op fra den lokale computer og oprette forbindelse til fjerncomputeren. Det er ikke en mulighed i det netværksscenarie, vi beskriver. Det er egentlig ligegyldigt, hvad det specifikke netværksproblem er – dette er nyttigt, når du ikke kan SSH direkte til en fjerncomputer.

Men hvis netværkskonfigurationen på din side er ligetil, kan fjerncomputeren oprette forbindelse til dig. Det alene er dog ikke tilstrækkeligt til dine behov, fordi det ikke giver dig en fungerende kommandolinjesession på fjerncomputeren. Men det er en begyndelse. Du har en etableret forbindelse mellem de to computere.

Svaret ligger i reverse SSH-tunneling.

Hvad er reverse SSH-tunneling?

Reverse SSH-tunneling giver dig mulighed for at bruge den etablerede forbindelse til at oprette en ny forbindelse fra din lokale computer tilbage til den fjerncomputer.

Annonce

Da den oprindelige forbindelse kom fra fjerncomputeren til dig, er det at bruge den til at gå i den anden retning at bruge den “i omvendt retning”. Og da SSH er sikkert, lægger du en sikker forbindelse inden i en eksisterende sikker forbindelse. Det betyder, at din forbindelse til fjerncomputeren fungerer som en privat tunnel inde i den oprindelige forbindelse.

Så kommer vi frem til navnet “reverse SSH-tunneling.”

Hvordan fungerer det?

Reverse SSH-tunneling er baseret på, at fjerncomputeren bruger den etablerede forbindelse til at lytte efter nye forbindelsesanmodninger fra den lokale computer.

Fjerncomputeren lytter på en netværksport på den lokale computer. Hvis den registrerer en SSH-anmodning til denne port, videresender den denne forbindelsesanmodning tilbage til sig selv, ned gennem den etablerede forbindelse. Dette giver en ny forbindelse fra den lokale computer til fjerncomputeren.

Reklame

Det er nemmere at opsætte, end det er at beskrive.

Brug af SSH Reverse Tunneling

SSH vil allerede være installeret på din Linux-computer, men det kan være nødvendigt at starte SSH-dæmonen (sshd), hvis den lokale computer aldrig har accepteret SSH-forbindelser før.

sudo systemctl start sshd

For at få SSH-dæmonen til at starte, hver gang du genstarter computeren, skal du bruge denne kommando:

sudo systemctl enable sshd

På fjerncomputeren bruger vi følgende kommando:

sudo systemctl enable sshd

På fjerncomputeren bruger vi følgende kommando.

  • Optionen -R (reverse) fortæller ssh, at der skal oprettes nye SSH-sessioner på fjerncomputeren.
  • Optionen “43022:localhost:22” fortæller ssh, at forbindelsesanmodninger til port 43022 på den lokale computer skal viderestilles til port 22 på fjerncomputeren. Port 43022 blev valgt, fordi den er opført som værende ikke-allokeret. Det er ikke et særligt nummer.
  • [email protected] er den brugerkonto, som fjerncomputeren skal oprette forbindelse til på den lokale computer.
ssh -R 43022:localhost:22 [email protected]

Du får muligvis en advarsel om, at du aldrig har oprettet forbindelse til den lokale computer før. Eller du får muligvis en advarsel, når forbindelsesoplysningerne tilføjes til listen over anerkendte SSH-værter. Hvad du ser – om noget – afhænger af, om der nogensinde har været oprettet forbindelser fra fjerncomputeren til den lokale computer.

Annonce

Du bliver bedt om at angive adgangskoden til den konto, du bruger til at oprette forbindelse til den lokale computer.

Bemærk, at kommandoprompten ændres fra dave@howtogeek til dave@sulaco, når forbindelsen er blevet oprettet.

Vi har nu forbindelse til den lokale computer fra fjerncomputeren. Det betyder, at vi kan sende kommandoer til den. Lad os bruge kommandoen who til at se logins på den lokale computer.

who

Vi kan se, at personen med brugerkontoen kaldet dave har logget ind på den lokale computer, og at fjerncomputeren har oprettet forbindelse (ved hjælp af de samme brugeroplysninger) fra IP-adressen 192.168.4.25.

RELATERET: Sådan bestemmes den aktuelle brugerkonto i Linux

Forbindelse til fjerncomputeren

Da forbindelsen fra fjerncomputeren er vellykket, og den lytter efter forbindelser, kan vi forsøge at oprette forbindelse til fjerncomputeren fra den lokale computer.

Annonce

Fjerncomputeren lytter på port 43022 på den lokale computer. Så – lidt kontraintuitivt – for at oprette en forbindelse til fjerncomputeren beder vi ssh om at oprette en forbindelse den lokale computer, på port 43022. Denne forbindelsesanmodning vil blive videresendt til fjerncomputeren.

ssh localhost -p 43022

Vi bliver bedt om adgangskoden til brugerkontoen og får derefter forbindelse til fjerncomputeren fra den lokale computer. Vores Manjaro-computer siger gladeligt: “Velkommen til Ubuntu 18.04.2 LTS”.

Bemærk, at kommandoprompten er ændret fra dave@sulaco til dave@howtogeek. Vi har nået vores mål om at oprette en SSH-forbindelse til vores svært tilgængelige fjerncomputer.

Brug af SSH med nøgler

For at gøre det mere bekvemt at oprette forbindelse fra fjerncomputeren til den lokale computer, kan vi konfigurere SSH-nøgler.

På fjerncomputeren skal du skrive denne kommando:

ssh-keygen

Annonce

Du vil blive bedt om en adgangsfrase. Du kan trykke på Enter for at ignorere spørgsmålene om passphrase, men dette anbefales ikke. Det ville betyde, at enhver på fjerncomputeren kan oprette en SSH-forbindelse til din lokale computer uden at blive spurgt om en adgangskode.

Tre eller fire ord adskilt af symboler udgør en robust passphrase.

Dine SSH-nøgler genereres.

Vi skal overføre den offentlige nøgle til den lokale computer. Brug denne kommando:

ssh-copy-id [email protected]

Reklame

Du vil blive bedt om adgangskoden til den brugerkonto, du logger på, i dette tilfælde [email protected].

Den første gang, du foretager en forbindelsesanmodning fra fjerncomputeren til den lokale computer, skal du angive adgangsfrasen. Du skal ikke angive det igen ved fremtidige forbindelsesanmodninger, så længe terminalvinduet forbliver åbent.

RELATERET: Sådan oprettes og installeres SSH-nøgler fra Linux Shell

Not All Tunnels Are Scary

Nogle tunneler kan være mørke og snoede, men reverse SSH-tunneling er ikke så svært at navigere i, hvis du kan holde forholdet mellem den fjerncomputer og den lokale computer lige i hovedet. Så vend det om.

Dave McKay
Dave McKay brugte først computere, da hulbånd med papir var på mode, og han har programmeret lige siden. Efter over 30 år i it-branchen er han nu teknologijournalist på fuld tid. I løbet af sin karriere har han arbejdet som freelanceprogrammør, leder af et internationalt softwareudviklingsteam, projektleder for IT-tjenester og senest som databeskyttelsesansvarlig. Dave er Linux-evangelist og fortaler for open source.Læs hele biografien ”

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.