
Wilt u SSH naar een onbereikbare Linux-computer? Laat hem je bellen en verbreek dan die verbinding om je eigen externe SSH-sessie te krijgen. We laten je zien hoe.
Wanneer u omgekeerde SSH-tunneling wilt gebruiken
Soms zijn externe computers moeilijk te bereiken. De site waar ze zich bevinden, heeft mogelijk strakke firewallregels, of misschien heeft de lokale beheerder complexe regels voor netwerkadresvertaling opgesteld. Hoe bereik je zo’n computer als je er verbinding mee moet maken?
Laten we een paar labels maken. Uw computer is de lokaal computer omdat deze bij u in de buurt is. De computer waarmee u verbinding gaat maken, is de afgelegen computer omdat deze zich op een andere locatie bevindt dan jij.
Om onderscheid te maken tussen de lokale en externe computers die in dit artikel worden gebruikt, wordt de externe computer “howtogeek” genoemd en draait Ubuntu Linux (met paarse terminalvensters). De lokale computer heet “Sulaco” en draait Manjaro Linux (met gele terminalvensters).
Normaal gesproken start u een SSH-verbinding vanaf de lokale computer en maakt u verbinding met de externe computer. Dat is geen optie in het netwerkscenario dat we beschrijven. Het maakt echt niet uit wat het specifieke netwerkprobleem is – dit is handig wanneer u niet rechtstreeks naar een externe computer kunt SSH.
Maar als de netwerkconfiguratie aan uw kant eenvoudig is, kan de externe computer verbinding met u maken. Dat alleen is echter niet voldoende voor uw behoeften, omdat het u geen werkende opdrachtregelsessie op de externe computer biedt. Maar het is een begin. Er is een verbinding tot stand gebracht tussen de twee computers.
Het antwoord ligt in omgekeerde SSH-tunneling.
Wat is omgekeerde SSH-tunneling?
Omgekeerde SSH-tunneling stelt u in staat die tot stand gebrachte verbinding te gebruiken om een nieuwe verbinding tot stand te brengen van uw lokale computer terug naar de externe computer.
Omdat de originele verbinding kwam van de externe computer naar jij, het gebruiken om in de andere richting te gaan, is het ‘omgekeerd’ gebruiken. En omdat SSH veilig is, plaatst u een beveiligde verbinding binnen een bestaande beveiligde verbinding. Dit betekent dat uw verbinding met de externe computer fungeert als een privétunnel binnen de oorspronkelijke verbinding.
En zo komen we uit bij de naam “omgekeerde SSH-tunneling”.
Hoe werkt het?
Omgekeerde SSH-tunneling is afhankelijk van de externe computer die de tot stand gebrachte verbinding gebruikt om te luisteren naar nieuwe verbindingsverzoeken van de lokale computer.
De externe computer luistert op een netwerkpoort op de lokale computer. Als het een SSH-verzoek naar die poort detecteert, stuurt het dat verbindingsverzoek terug naar zichzelf, de tot stand gebrachte verbinding verbreken. Dit zorgt voor een nieuwe verbinding van de lokale computer naar de externe computer.
Het is gemakkelijker op te zetten dan te beschrijven.
SSH Reverse Tunneling gebruiken
SSH is al op uw Linux-computer geïnstalleerd, maar u moet mogelijk de SSH-daemon (sshd) starten als de lokale computer nog nooit SSH-verbindingen heeft geaccepteerd.
sudo systemctl start sshd

Gebruik deze opdracht om de SSH-daemon elke keer dat u uw computer opnieuw opstart te starten:
sudo systemctl enable sshd

Op de externe computer gebruiken we de volgende opdracht.
- De
-R(omgekeerde) optie verteltsshdat er nieuwe SSH-sessies moeten worden gemaakt op de externe computer. - De “43022: localhost: 22” vertelt
sshdat verbindingsverzoeken naar poort 43022 op de lokale computer moeten worden doorgestuurd naar poort 22 op de externe computer. Poort 43022 is gekozen omdat deze wordt vermeld als niet-toegewezen. Het is geen speciaal nummer. - dave@sulaco.local is het gebruikersaccount waarmee de externe computer verbinding gaat maken op de lokale computer.
ssh -R 43022:localhost:22 dave@sulaco.local

Mogelijk krijgt u een waarschuwing dat u nog nooit een verbinding met de lokale computer heeft gemaakt. Of u ziet mogelijk een waarschuwing wanneer de verbindingsdetails worden toegevoegd aan de lijst met herkende SSH-hosts. Wat u ziet, hangt ervan af of er ooit verbindingen zijn gemaakt tussen de externe computer en de lokale computer.
U wordt gevraagd om het wachtwoord van het account dat u gebruikt om verbinding te maken met de lokale computer.

Merk op dat wanneer de verbinding tot stand is gebracht, de opdrachtprompt verandert van dave @ howtogeek in dave @ sulaco.
We zijn nu verbonden met de lokale computer vanaf de externe computer. Dat betekent dat we er opdrachten aan kunnen geven. Laten we de who opdracht om de aanmeldingen op de lokale computer te zien.
who

We kunnen zien dat de persoon met het gebruikersaccount dave is ingelogd op de lokale computer en dat de externe computer verbinding heeft gemaakt (met dezelfde gebruikersreferenties) vanaf IP-adres 192.168.4.25.
VERWANT: Hoe u het huidige gebruikersaccount in Linux kunt bepalen
Verbinding maken met de externe computer
Omdat de verbinding vanaf de externe computer succesvol is en hij luistert naar verbindingen, kunnen we proberen om vanaf de lokale computer verbinding te maken met de externe computer.
De externe computer luistert op poort 43022 op de lokale computer. Dus – enigszins contra-intuïtief – vragen we om verbinding te maken met de externe computer ssh om een verbinding tot stand te brengen op de lokale computer, op poort 43022. Dat verbindingsverzoek wordt doorgestuurd naar de externe computer.
ssh localhost -p 43022

We worden gevraagd om het wachtwoord van de gebruikersaccount en worden vervolgens vanaf de lokale computer verbonden met de externe computer. Onze Manjaro-computer zegt vrolijk: “Welkom bij Ubuntu 18.04.2 LTS”.

Merk op dat de opdrachtprompt is veranderd van dave @ sulaco naar dave @ howtogeek. We hebben ons doel bereikt om een SSH-verbinding te maken met onze moeilijk bereikbare externe computer.
SSH gebruiken met sleutels
Om het gemakkelijker te maken om vanaf de externe computer verbinding te maken met de lokale computer, kunnen we SSH-sleutels instellen.
Typ deze opdracht op de externe computer:
ssh-keygen

U wordt om een wachtwoordzin gevraagd. U kunt op Enter drukken om de wachtwoordzinvragen te negeren, maar dit wordt niet aanbevolen. Het zou betekenen dat iedereen op de externe computer een SSH-verbinding met uw lokale computer zou kunnen maken zonder te worden gevraagd om een wachtwoord.
Drie of vier woorden gescheiden door symbolen vormen een robuuste wachtwoordzin.

Uw SSH-sleutels worden gegenereerd.
We moeten de openbare sleutel naar de lokale computer overbrengen. Gebruik deze opdracht:
ssh-copy-id dave@sulaco.local

U wordt gevraagd om het wachtwoord voor het gebruikersaccount waarop u zich aanmeldt, in dit geval dave@sulaco.local.

De eerste keer dat u een verbindingsverzoek doet van de externe computer naar de lokale computer, moet u de wachtwoordzin opgeven. U hoeft het niet opnieuw in te voeren voor toekomstige verbindingsverzoeken, zolang dat terminalvenster open blijft.

VERWANT: SSH-sleutels maken en installeren vanuit de Linux-shell
Niet alle tunnels zijn eng
Sommige tunnels kunnen donker en bochtig zijn, maar omgekeerde SSH-tunneling is niet zo moeilijk om te navigeren als je de relatie tussen de externe computer en de lokale computer recht in je hoofd kunt houden. Draai het dan om.