Direct naar de inhoud

Cookie-instellingen

Kies per soort welke cookies je toestaat. Je kunt je keuze altijd wijzigen via Cookie-instellingen onderaan elke pagina. Privacyverklaring

Noodzakelijk

Altijd aan

Nodig om in te loggen, je winkelwagen te bewaren en je keuzes te onthouden. Deze staan altijd aan.

Welke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: je sessie en ingelogd blijven
  • weboke_basket: je winkelwagen
  • wkBtwIncl: prijzen met of zonder btw tonen
  • wok_cookies: je cookiekeuze, 12 maanden

Meet welke advertentie tot een bezoek of bestelling leidt, zodat we niet betalen voor advertenties die niets doen.

Welke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), tot 90 dagen
  • OpenAI Ads, advertenties in ChatGPT
  • wok_aff: via welke partner je bij ons kwam (affiliateprogramma), 60 dagen

4,6

Land en taal

Elk land heeft zijn eigen site, met prijzen en btw van dat land.

Bekijken

Module 2 · 2.3

SSH slim gebruiken

Module 2: SSH en sleutels · Leestijd: 10 minuten

Leerdoel: Na deze les kun je SSH dagelijks handig gebruiken met een eigen configuratiebestand, bestanden kopiëren met scp en rsync, en met een tunnel bij een database komen zonder dat de databasepoort open hoeft naar internet.

Kernbegrippen: ~/.ssh/config, Host, HostName, User, IdentityFile, scp, rsync, sftp, port forwarding, -L, tunnel, ProxyJump, ServerAliveInterval, ander poortnummer, sleutel intrekken

Minder typen met ~/.ssh/config

Na een paar weken typ je dit tientallen keren per dag:

anna@laptop:~$ ssh -i ~/.ssh/id_ed25519 anna@192.0.2.10

Met een configuratiebestand voor de client wordt dat korter en maak je minder fouten. Het bestand staat op je eigen computer: ~/.ssh/config (Windows: C:\Users\anna\.ssh\config, zonder extensie).

Host web1
    HostName 192.0.2.10
    User anna
    IdentityFile ~/.ssh/id_ed25519
    ServerAliveInterval 60

Host test
    HostName test.example.com
    User anna
    Port 2222

Nu is het gewoon:

anna@laptop:~$ ssh web1
anna@web1:~$

Wat doen de regels?

  • Host is de bijnaam die je zelf kiest. Je typt die achter ssh, scp en rsync.
  • HostName is het echte adres: een IP-adres of een naam die in de DNS staat.
  • User en Port zijn de gebruikersnaam en de poort, zodat je die niet meer hoeft te onthouden.
  • IdentityFile wijst de sleutel aan. Handig als je meerdere sleutels hebt; zonder deze regel probeert ssh je standaardsleutels.
  • ServerAliveInterval 60 stuurt elke 60 seconden een klein teken van leven. Veel thuisrouters en wifi-netwerken verbreken een stille verbinding na een paar minuten; hiermee blijft je sessie open.

Ook hier geldt dat de eerste waarde telt, net als bij de server. Zet algemene regels als Host * dus onderaan het bestand.

Bestanden kopiëren: scp, rsync en sftp

scp kopieert een bestand, met dezelfde vorm als cp, maar met host: ervoor:

anna@laptop:~$ scp backup.sql web1:/home/anna/
anna@laptop:~$ scp web1:/var/log/nginx/error.log .

rsync is slimmer bij mappen en grote hoeveelheden: het stuurt alleen wat veranderd is, en kan een onderbroken kopie hervatten. Het moet op beide kanten geïnstalleerd zijn (apt install rsync).

anna@laptop:~$ rsync -avz --progress ./site/ web1:/var/www/example.com/

Let op de slash achter ./site/: met slash kopieert rsync de inhoud van de map, zonder slash de map zelf (je krijgt dan /var/www/example.com/site/). Probeer bij twijfel eerst met --dry-run, en wees heel voorzichtig met --delete, dat aan de ontvangende kant alles weghaalt wat bij jou niet bestaat.

sftp en grafische programma's als FileZilla of WinSCP gebruiken dezelfde SSH-verbinding en dezelfde sleutel. Er is dus geen aparte FTP-server nodig. Een ouderwetse FTP-server op een VPS is af te raden: gewone FTP stuurt je wachtwoord onversleuteld over het netwerk.

Een tunnel in plaats van een open poort

Dit is misschien het nuttigste wat SSH kan. Stel: op je server draait een PostgreSQL-database. Je wilt er vanaf je laptop met een grafisch programma bij. De verleiding is groot om poort 5432 open te zetten naar internet. Doe dat niet: open databasepoorten zijn een van de grootste oorzaken van datalekken (les 10.2), en de cursus controleert later van buitenaf dat ze dicht zijn (opdracht Z5.1).

Met lokale port forwarding laat je SSH een tunnel maken:

anna@laptop:~$ ssh -L 5432:127.0.0.1:5432 web1

Lees dat als: "luister op mijn laptop op poort 5432, en stuur alles wat daar binnenkomt door de SSH-verbinding naar 127.0.0.1:5432, gezien vanaf de server". Zolang deze sessie open is, verbind je je databaseprogramma met localhost poort 5432 op je eigen laptop, en kom je bij de database op de server uit.

Wat maakt dit zo goed?

  • De database luistert alleen op 127.0.0.1 op de server en is van buiten onbereikbaar.
  • De verbinding is versleuteld door SSH, ook als de database zelf geen versleuteling heeft.
  • Alleen wie kan inloggen met SSH, kan erbij. Je gebruikt dus de sterke beveiliging die je al hebt.

Draait er op je laptop al iets op 5432, kies dan links een ander nummer: -L 15432:127.0.0.1:5432, en verbind met poort 15432. Zet je de tunnel in ~/.ssh/config, dan heb je hem altijd bij de hand:

Host web1-db
    HostName 192.0.2.10
    User anna
    LocalForward 15432 127.0.0.1:5432

Met ssh -N web1-db krijg je alleen de tunnel, zonder opdrachtregel.

Via een tussenserver: ProxyJump

Soms kun je een server alleen bereiken via een andere, bijvoorbeeld een databaseserver zonder publiek IP-adres achter je webserver. ProxyJump springt via de eerste server door naar de tweede:

Host db1
    HostName 10.0.0.5
    User anna
    ProxyJump web1

Het verschil met agent forwarding (les 2.1): bij ProxyJump loopt de versleuteling van begin tot eind tussen je laptop en db1. De tussenserver geeft alleen de pakketjes door en kan jouw sleutel niet gebruiken.

Een ander poortnummer: wel of niet?

Veel handleidingen raden aan SSH op een andere poort te zetten, bijvoorbeeld 2222. Wat doet dat echt?

  • Het vermindert de ruis: de meeste geautomatiseerde raadpogingen proberen alleen poort 22. Je log wordt rustiger.
  • Het is geen beveiliging. Een scanner die alle poorten afloopt, vindt SSH binnen seconden aan zijn versiebanner.

Met sleutels en wachtwoordlogin uit (les 2.2) maakt de poort voor de veiligheid weinig uit. Wil je toch wisselen, doe het dan in de goede volgorde: nieuwe poort openzetten in de firewall, SSH laten luisteren op beide poorten, testen in een tweede venster, pas dan de oude poort dicht. Op Ubuntu 24.04 en later horen daar systemctl daemon-reload en systemctl restart ssh.socket bij (les 2.2). Vergeet niet dat je aanbieder misschien ook een firewall heeft.

Toegang intrekken

Een oud-collega of een webbouwer had een sleutel op je server en werkt niet meer voor je? Toegang intrekken is eenvoudig, als je het bijhoudt:

  1. Bekijk alle sleutels: ssh-keygen -lf ~/.ssh/authorized_keys, en doe dat voor elke gebruiker (ook /root/.ssh/authorized_keys).
  2. Haal de regel van die persoon weg.
  3. Gebruikte hij een eigen gebruikersaccount, vergrendel dat dan (les 3.1) en kijk of hij in de groep sudo zat (les 3.2).
  4. Heeft hij wachtwoorden gezien, zoals een databasewachtwoord in een configuratiebestand, vervang die dan ook.

Een gewone sleutel heeft geen vervaldatum. Wat je niet weghaalt, blijft werken, jaren later nog. Geef je iemand tijdelijk toegang, dan kun je vóór zijn regel in authorized_keys de optie expiry-time="20261231" zetten; na die datum weigert de server de sleutel.

Samenvatting

  • ~/.ssh/config op je eigen computer bewaart per server de naam, gebruiker, poort en sleutel; Host * hoort onderaan.
  • scp voor losse bestanden, rsync voor mappen (let op de slash en op --delete), sftp in plaats van FTP.
  • Met ssh -L bereik je een database via een versleutelde tunnel, terwijl de databasepoort van buiten dicht blijft.
  • ProxyJump springt veilig via een tussenserver; beter dan agent forwarding.
  • Een ander poortnummer vermindert ruis, maar beveiligt niet. Sleutels die je niet weghaalt, blijven werken.

Quiz

1. Wat doet ssh -L 15432:127.0.0.1:5432 web1?



2. Waarom is een SSH-tunnel naar een database beter dan poort 5432 openzetten in de firewall?



3. Je verplaatst SSH naar poort 2222. Wat is het belangrijkste effect?



4. In je ~/.ssh/config staat bovenaan Host * met User root, en verderop Host web1 met User anna. Als welke gebruiker log je in bij ssh web1?



5. Een webbouwer had een eigen SSH-sleutel op je server en werkt niet meer voor je. Wat is níet voldoende?



Opdracht

Opdracht O2.3: Een SSH-config en een tunnel. Maak op je eigen computer een ~/.ssh/config met een bijnaam voor je server, log in met alleen ssh <bijnaam>, kopieer een bestand met scp of rsync, en maak een tunnel met -L naar een dienst die op je server alleen op 127.0.0.1 luistert (heb je nog geen database, gebruik dan poort 22 van de server zelf: ssh -L 2200:127.0.0.1:22 <bijnaam> en daarna ssh -p 2200 anna@localhost). Beantwoord de vragen over wat de tunnel doet en waarom de poort niet open hoeft.

Opdracht O2.3: Een SSH-config en een tunnel

Deze opdracht doe je zelf; niemand kijkt hem na. Vink af wat je gedaan hebt en markeer de opdracht als gedaan.




Je vinkjes en aantekeningen blijven alleen in deze browser; we sturen ze nergens heen. Ben je aangemeld, dan bewaren we in Mijn cursussen alleen dat je de opdracht gedaan hebt.

Verder lezen

De stappen in deze artikelen gelden voor de VPS'en en panelen van WebOké; bij andere aanbieders werkt het vergelijkbaar.

Even geduld…

Stel je domeinen in

Regel per domein de nameservers, de koppeling aan je hosting en wie de eigenaar wordt.

Je domeinen laden…