- Dave McKay
@TheGurkha
- Juli 18, 2019, 9:00am EDT
Nodig om naar een onbereikbare Linux-computer te SSH-en? Laat hem jou bellen en graaf je vervolgens in die verbinding in om je eigen SSH-sessie op afstand te krijgen. We laten u zien hoe dat moet.
Wanneer u omgekeerde SSH-tunneling wilt gebruiken
Soms zijn computers op afstand moeilijk te bereiken. De site waar ze staan kan strenge firewall regels hebben, of misschien heeft de lokale admin complexe Network Address Translation regels ingesteld. Hoe bereikt u zo’n computer als u er verbinding mee wilt maken?
Laten we eens wat labels vaststellen. Uw computer is de lokale computer omdat hij bij u in de buurt staat. De computer waarmee u verbinding wilt maken is de externe computer, omdat deze zich op een andere plaats bevindt dan u.
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 terminal vensters).
Normaal gesproken zou je een SSH verbinding starten vanaf de lokale computer en verbinding maken met de externe computer. Dat is geen optie in het netwerkscenario dat we beschrijven. Het maakt niet uit wat het specifieke netwerkprobleem is – dit is handig als je niet rechtstreeks naar een computer op afstand kunt SSH-en.
Maar als de netwerkconfiguratie aan jouw kant eenvoudig is, kan de computer op afstand verbinding met je maken. Dat alleen is echter niet voldoende voor uw behoeften, omdat het u geen werkende command-line sessie op de externe computer geeft. Maar het is een begin. U heeft een opgezette verbinding tussen de twee computers.
Het antwoord ligt in reverse SSH tunneling.
Wat is Reverse SSH Tunneling?
Reverse SSH tunneling staat u toe om die opgezette verbinding te gebruiken om een nieuwe verbinding op te zetten van uw lokale computer terug naar de computer op afstand.
Omdat de originele verbinding van de computer op afstand naar jou kwam, is het gebruiken ervan om de andere kant op te gaan “omgekeerd” gebruiken. En omdat SSH veilig is, plaats je een veilige verbinding in een bestaande veilige verbinding. Dit betekent dat uw verbinding met de computer op afstand werkt als een privé tunnel binnen de oorspronkelijke verbinding.
En zo komen we bij de naam “omgekeerde SSH-tunneling.”
Hoe werkt het?
Reverse SSH-tunneling berust op het gebruik van de computer op afstand om te luisteren naar nieuwe verbindingsverzoeken van de lokale computer.
De computer op afstand luistert op een netwerkpoort op de lokale computer. Als hij een SSH-verzoek naar die poort detecteert, stuurt hij dat verbindingsverzoek terug naar zichzelf, via de opgezette verbinding. Dit zorgt voor een nieuwe verbinding van de lokale computer naar de computer op afstand.
Het is eenvoudiger op te zetten dan het is om te beschrijven.
SH Reverse Tunneling gebruiken
SSH zal al op uw Linux computer zijn geïnstalleerd, maar u moet misschien de SSH daemon (sshd) starten als de lokale computer nog nooit SSH verbindingen heeft geaccepteerd.
sudo systemctl start sshd
Om de SSH daemon iedere keer te laten starten als u uw computer opnieuw opstart, gebruikt u dit commando:
sudo systemctl enable sshd
Op de externe computer gebruiken we het volgende commando.
- De
-R
(reverse) optie verteltssh
dat nieuwe SSH sessies moeten worden aangemaakt op de computer op afstand. - De “43022:localhost:22” vertelt
ssh
dat verbindingsverzoeken naar poort 43022 op de lokale computer moeten worden doorgestuurd naar poort 22 op de computer op afstand. Poort 43022 is gekozen omdat deze staat vermeld als niet-toegewezen. Het is geen speciaal nummer. - [email protected] is de gebruikersaccount waarmee de externe computer verbinding gaat maken op de lokale computer.
ssh -R 43022:localhost:22 [email protected]
Het kan zijn dat u een waarschuwing krijgt dat u nog nooit verbinding heeft gemaakt met de lokale computer. Of u ziet een waarschuwing als de verbindingsdetails worden toegevoegd aan de lijst van herkende SSH hosts. Wat u ziet – als er al iets te zien is – hangt af van de vraag of er ooit verbindingen zijn gemaakt van de externe computer naar de lokale computer.
U wordt gevraagd om het wachtwoord van de account die 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 commando’s naar kunnen sturen. Laten we het commando who
gebruiken om de aanmeldingen op de lokale computer te zien.
who
We kunnen zien dat de persoon met de gebruikersaccount die dave heet, heeft ingelogd op de lokale computer, en dat de externe computer verbinding heeft gemaakt (met dezelfde gebruikersgegevens) vanaf het IP-adres 192.168.4.25.
GERELATEERD: How to Determine the Current User Account in Linux
Connecting to the Remote Computer
Omdat de verbinding vanaf de externe computer succesvol is, en hij luistert voor verbindingen, kunnen we proberen verbinding te maken met de externe computer vanaf de lokale.
De externe computer luistert op poort 43022 op de lokale computer. Dus – een beetje tegen-intuïtief – om een verbinding te maken met de computer op afstand, vragen we ssh
om een verbinding te maken met de lokale computer, op poort 43022. Dat verbindingsverzoek wordt doorgestuurd naar de computer op afstand.
ssh localhost -p 43022
We worden gevraagd om het wachtwoord van de gebruikersaccount, en vervolgens worden we vanaf de lokale computer verbonden met de computer op afstand. Onze Manjaro computer zegt vrolijk, “Welkom op Ubuntu 18.04.2 LTS”.
Merk op dat de commando prompt is veranderd van dave@sulaco naar dave@howtogeek. We hebben ons doel bereikt om een SSH-verbinding te maken met onze moeilijk te bereiken computer op afstand.
SH gebruiken met sleutels
Om het gemakkelijker te maken om verbinding te maken van de computer op afstand naar de lokale computer, kunnen we SSH-sleutels instellen.
Type op de externe computer dit commando:
ssh-keygen
U wordt om een wachtwoordzin gevraagd. U kunt op Enter drukken om de passphrase vragen te negeren, maar dit wordt niet aangeraden. Het zou betekenen dat iedereen op de computer op afstand een SSH-verbinding met uw lokale computer zou kunnen maken zonder om een wachtwoord te worden gevraagd.
Drie of vier woorden gescheiden door symbolen vormen een robuuste passphrase.
Uw SSH-sleutels worden gegenereerd.
We moeten de publieke sleutel overbrengen naar de lokale computer. Gebruik dit commando:
ssh-copy-id [email protected]
U wordt gevraagd om het wachtwoord voor de gebruikersaccount waarmee u inlogt, in dit geval [email protected].
De eerste keer dat u een verbindingsverzoek indient van de externe computer naar de lokale computer, moet u de passphrase opgeven. U hoeft deze niet opnieuw in te voeren voor toekomstige verbindingsverzoeken, zolang het terminalvenster geopend blijft.
GERELATEERD: Hoe SSH-sleutels maken en installeren vanuit de Linux-shell
Niet alle tunnels zijn eng
Sommige tunnels kunnen duister en kronkelig zijn, maar omgekeerd SSH-tunnelen is niet al te moeilijk als je de relatie tussen de externe computer en de lokale computer goed in je hoofd kunt houden.
Dave McKay gebruikte voor het eerst computers toen ponsband nog in de mode was, en hij programmeert sindsdien. Na meer dan 30 jaar in de IT industrie, is hij nu een full-time technologie journalist. Tijdens zijn loopbaan heeft hij gewerkt als freelance programmeur, manager van een internationaal software ontwikkelingsteam, een IT services project manager, en, meest recent, als een Data Protection Officer. Dave is een Linux evangelist en voorstander van open source.Read Full Bio ”