7.5 Een tunnel met ssh
Hier bouw je op verder: Inloggen met ssh en Een website uit Linux in je browser
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
Een programma op een server Een computer of programma dat iets aanbiedt aan andere computers, zoals een website; een servercomputer staat meestal zonder scherm in een datacenter.Uitgelegd in 7.2 Inloggen op een andere computerAlle begrippen dat alleen op 127.0.0.1 luistert, is van buiten niet te bereiken. Dat is veilig, en soms wil jij er toch bij: een beheerpagina, bijvoorbeeld. Met ssh Secure shell: inloggen op een andere computer, waarbij je in je eigen terminal typt en de commando's daar draaien.Uitgelegd in 7.2 Inloggen op een andere computerAlle begrippen maak je dan een tunnel: een poort Een nummer waarop een programma op een computer luistert, zoals 8000 in localhost:8000.Alle begrippen op je eigen computer die via ssh uitkomt bij een poort op de server.
Een website die alleen op de server staat
Zet een kleine website neer, die alleen op 127.0.0.1 luistert:
mkdir site
echo "<h1>Alleen op de server</h1>" > site/index.html
cd site
python3 -m http.server 8000 --bind 127.0.0.1
Je oefent weer op localhost, dus de "server" is je eigen Ubuntu De Linux die je in deze cursus gebruikt, en die je op de meeste servers tegenkomt.Uitgelegd in 5.1 WSL installerenAlle begrippen. Open een tweede terminal Het venster waarin je commando's typt en de antwoorden van de computer leest.Uitgelegd in Linux: zo werkt deze cursusAlle begrippen, en maak de tunnel:
ssh -N -L 9000:127.0.0.1:8000 localhost
-L 9000:127.0.0.1:8000 betekent: poort 9000 hier, op mijn computer, gaat naar 127.0.0.1:8000 gezien vanaf de server. -N betekent: geen commando Een opdracht die je in de terminal typt, zoals whoami of ls; na Enter voert de computer hem uit.Uitgelegd in 1.1 Je eerste commando'sAlle begrippen, alleen de tunnel. De terminal lijkt stil te staan; zolang hij open is, staat de tunnel.
Open http://localhost:9000 in je browser. Daar staat Alleen op de server.
Voorspel
Op een echte server typ je ssh -N -L 9000:127.0.0.1:8000 sam@server.voorbeeld.nl. Waar wijst 127.0.0.1 in dat commando naar: je laptop, of de server?
Klik hier als je het hebt geprobeerd
Naar de server. Het adres achter de eerste dubbele punt kijkt ssh op aan de kant van de server: daar betekent 127.0.0.1 de server zelf. Daarom kun je zo bij een programma dat alleen voor de server zelf luistert, zonder dat het op internet staat. Wie er via de tunnel bij wil, moet eerst met ssh kunnen inloggen.
Opdracht 7.5.a: een andere poort
Laat de website op 8000 draaien, en maak een tunnel zodat hij in je browser op http://localhost:9500 staat.
Klik hier voor een tip
Alleen het eerste getal na -L gaat over je eigen computer.
Klik hier voor het antwoord
ssh -N -L 9500:127.0.0.1:8000 localhost
Stop de tunnel met Ctrl+C, en de website in de eerste terminal ook.
De ssh-dienst weer uit
Zolang openssh-server draait, kan je Ubuntu inlogpogingen ontvangen, ook met een wachtwoord. Op je eigen laptop heb je dat na deze cursus niet meer nodig. Zet de dienst Een programma dat op de achtergrond blijft draaien, ook als niemand is ingelogd, en na een herstart vanzelf weer start.Uitgelegd in 6.4 DienstenAlle begrippen uit, net als nginx in 6.4.
Bij ssh zijn het er twee. Op Ubuntu 24.04 wacht ssh.socket op poort 22, en pas als er iemand inlogt, start die de dienst ssh. Zet je alleen ssh uit, dan start de socket hem bij de volgende poging weer. Zet ze daarom allebei uit:
sudo systemctl disable --now ssh.socket ssh
Wil je hem later weer gebruiken, zet dan de socket weer aan: sudo systemctl enable --now ssh.socket.
Klaar met thema 7? Typ in je thuismap Je eigen map, /home/student in de oefenterminal; de prompt kort hem af tot ~.Uitgelegd in 1.1 Je eerste commando'sAlle begrippen bash controleer.sh 7. Het script kijkt of alles uit dit thema klopt; je downloadt het op de startpagina.
Er gaat iets mis
cannot listen to port
channel_setup_fwd_listener_tcpip: cannot listen to port: 9000
Could not request local forwarding.
Oorzaak: poort 9000 op je eigen computer is al bezet, vaak door een tunnel in een andere terminal.
Oplossing: sluit die andere tunnel, of kies een ander eerste getal: -L 9001:127.0.0.1:8000.
connect failed: Connection refused
De browser zegt dat de verbinding is verbroken, en in de terminal met de tunnel staat:
channel 1: open failed: connect failed: Connection refused
Oorzaak: de tunnel staat, maar op de server luistert niets op de poort achter 127.0.0.1:. De website draait niet, of op een andere poort.
Oplossing: start de website in de eerste terminal, en controleer of het tweede getal na -L zijn poort is.
Klaar met deze cursus? In de fullstack-cursus zet je je eigen site online, op een echte Linux-server.