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 1 · 1.3

De eerste SSH-login

Module 1: Je eerste server · Leestijd: 10 minuten

Leerdoel: Na deze les kun je voor het eerst met SSH op je server inloggen, de vingerafdruk van de server controleren voordat je hem vertrouwt, en weten wat je doet bij de waarschuwing dat de identiteit van de server is veranderd.

Kernbegrippen: SSH, client en server, poort 22, versiebanner, host key, vingerafdruk (SHA256), known_hosts, trust on first use, "REMOTE HOST IDENTIFICATION HAS CHANGED", PowerShell en Terminal

Wat SSH is

SSH (Secure Shell) is de versleutelde verbinding waarmee je een server op afstand beheert. Je typt op je eigen computer, de commando's worden op de server uitgevoerd. Alles wat over de lijn gaat, ook je wachtwoord, is versleuteld.

Er zijn twee kanten:

  • de SSH-client op je eigen computer: het programma ssh. Op macOS en Linux zit het er standaard bij. Op Windows 10 (vanaf versie 1809) en Windows 11 is de OpenSSH-client een onderdeel van Windows; je gebruikt hem in PowerShell of Windows Terminal. Ontbreekt hij, dan voeg je hem toe via Instellingen, Optionele onderdelen, "OpenSSH-client". Programma's met vensters zoals PuTTY werken ook, maar in deze cursus gebruiken we ssh.
  • de SSH-server op de VPS: het programma sshd (van OpenSSH). Het luistert standaard op poort 22.

Inloggen

Je logt in met een gebruikersnaam en het adres van de server:

PS C:\Users\anna> ssh root@192.0.2.10

Of met een naam, als je die in de DNS hebt gezet (les 7.1):

anna@laptop:~$ ssh root@web1.example.com

De eerste keer zie je iets als dit:

The authenticity of host '192.0.2.10 (192.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Dit is het belangrijkste moment van deze les. Typ niet blind yes.

De host key en de vingerafdruk

Elke SSH-server heeft een of meer host keys: sleutelparen waarmee de server bewijst wie hij is. De publieke delen staan op de server in /etc/ssh/, bijvoorbeeld /etc/ssh/ssh_host_ed25519_key.pub. Bij elke verbinding laat de server zien dat hij het geheime deel heeft.

Een vingerafdruk is een korte samenvatting (een hash) van zo'n publieke sleutel. OpenSSH toont standaard de SHA256-vorm: SHA256: gevolgd door 43 tekens.

De vraag "Are you sure you want to continue connecting?" betekent: je computer kent deze server nog niet. Wie garandeert dat je met jouw VPS praat en niet met iemand die het verkeer onderschept? Niemand, tenzij jij de vingerafdruk vergelijkt met een betrouwbare bron.

Die bron is de console van je aanbieder (les 1.2). Daar praat je niet via het netwerk met de server. Log in de console in en vraag de vingerafdruk op:

root@web1:~# ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
256 SHA256:Xq3aTnPpC0m1o4cJ2kVqY8mWb7rZs5dLfE6hUyN9tKs root@web1 (ED25519)

Komt dit precies overeen met wat de client toont, dan typ je yes. Je kunt ook de vingerafdruk zelf plakken in plaats van yes; dan vergelijkt ssh hem voor je. Wijkt hij af, dan stop je en zoek je uit waarom (verkeerd IP-adres, server opnieuw geïnstalleerd, of iets ernstigers).

Let op het type: de client noemt het type (ED25519, ECDSA of RSA). Vergelijk de vingerafdruk van hetzelfde type. Veel images zetten de vingerafdrukken ook bij de eerste start in de console (cloud-init), tussen regels als BEGIN SSH HOST KEY FINGERPRINTS.

known_hosts en trust on first use

Typ je yes, dan zie je:

Warning: Permanently added '192.0.2.10' (ED25519) to the list of known hosts.

De client bewaart de sleutel in ~/.ssh/known_hosts (op Windows C:\Users\<naam>\.ssh\known_hosts). Vanaf nu vergelijkt hij bij elke verbinding automatisch. Dit model heet trust on first use (TOFU): de eerste keer moet je het zelf controleren, daarna bewaakt de client het.

Daarom is die eerste controle zo belangrijk: vertrouw je een verkeerde sleutel, dan waarschuwt de client daarna nooit meer.

Werk je zelf op een computer met Debian of Ubuntu, dan staan de namen in known_hosts standaard gehasht (HashKnownHosts yes in /etc/ssh/ssh_config), dus je ziet daar geen leesbare IP-adressen. Op Windows en macOS staan ze er leesbaar in. Zoeken werkt overal met:

anna@laptop:~$ ssh-keygen -F 192.0.2.10
# Host 192.0.2.10 found: line 3
|1|kP9...= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA...

"REMOTE HOST IDENTIFICATION HAS CHANGED"

Soms zie je deze waarschuwing:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
...
Host key verification failed.

De server laat een andere sleutel zien dan je client kent. ssh weigert dan te verbinden. Er zijn twee soorten oorzaken:

NormaalVerdacht
Je hebt de VPS opnieuw geïnstalleerd (nieuwe host keys)Je hebt niets veranderd en toch is de sleutel anders
Het IP-adres is aan een andere server gegevenJe zit op een vreemd wifinetwerk
Je hebt bewust de host keys vervangenDe vingerafdruk in de console wijkt af van wat de client nu ziet

Is er een normale verklaring, controleer dan opnieuw de vingerafdruk in de console en verwijder pas daarna de oude regel:

anna@laptop:~$ ssh-keygen -R 192.0.2.10
# Host 192.0.2.10 found: line 3
/home/anna/.ssh/known_hosts updated.

Bij de volgende verbinding krijg je weer de vraag van de eerste keer, en controleer je weer. Zet nooit StrictHostKeyChecking no in je instellingen om de waarschuwing weg te werken: dan zet je precies de bescherming uit waar het om gaat.

De versiebanner

Voordat er iets versleuteld wordt, sturen client en server elkaar een regel tekst: de versiebanner. Die is voor iedereen op internet zichtbaar. Je ziet hem met ssh -v:

anna@laptop:~$ ssh -v root@192.0.2.10 2>&1 | grep "remote software"
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.6p1 Ubuntu-3ubuntu13.5

De server zegt hier welk protocol (2.0) en welke software hij gebruikt. Debian en Ubuntu zetten er de pakketversie achter. Dat is geen geheim dat je moet verbergen: aanvallers proberen toch alles, en je beschermt je met updates (module 4), niet met een andere banner. Wel handig: aan de banner zie je van buitenaf of je server echt de bijgewerkte versie draait.

Op AlmaLinux en Rocky Linux

Inloggen en vingerafdrukken werken hetzelfde. De dienst heet sshd in plaats van ssh (systemctl status sshd). De banner bevat geen distributienaam, alleen de OpenSSH-versie.

Samenvatting

  • SSH is de versleutelde verbinding naar je server; ssh is de client, sshd de server op poort 22.
  • Bij de eerste verbinding toont de client de vingerafdruk van de host key. Vergelijk die met de uitvoer van ssh-keygen -lf in de console voordat je yes typt.
  • De client bewaart de sleutel in ~/.ssh/known_hosts en waarschuwt voortaan zelf (trust on first use).
  • "REMOTE HOST IDENTIFICATION HAS CHANGED" is normaal na een herinstallatie; anders is het verdacht. Verwijder een oude regel alleen na controle, met ssh-keygen -R.
  • De versiebanner is openbaar; bescherming komt van updates, niet van verbergen.

Quiz

1. Waarmee vergelijk je de vingerafdruk die ssh bij de eerste verbinding toont?



2. Wat doet ~/.ssh/known_hosts?



3. Je hebt je VPS opnieuw geïnstalleerd en krijgt "REMOTE HOST IDENTIFICATION HAS CHANGED". Wat is de juiste volgorde?



4. Waarom is de eerste controle bij trust on first use zo belangrijk?



5. Wat laat de versiebanner van een SSH-server zien?



Opdracht

Opdracht Z1.3: SSH-banner en vingerafdruk van je server. Vul het adres van je server in, de softwareversie uit de banner (zoals OpenSSH_9.6p1) en de ED25519-vingerafdruk die je in de console met ssh-keygen -lf opvroeg. Het programma maakt één verbinding naar je SSH-poort, leest de banner en de host key, en vergelijkt. Het logt niet in.

Opdracht Z1.3: SSH-banner en vingerafdruk van je server

We loggen niet in en proberen geen wachtwoord of sleutel. Eerst laat je zien dat de server van jou is: klik op "Toon mijn code" en zet een bestand /.well-known/weboke-cursus-<code>.txt met alleen die code op de webserver van je hostnaam. We halen het rechtstreeks op bij elk IP-adres dat we controleren (IPv4 en IPv6 apart); een TXT-record telt hier niet. De controle komt van heavy.webawere.nl (185.158.167.16 en 2a07:ae80:100:0:185:158:167:16), niet van onze webserver. Alleen voor aangemelde cursisten; per server hoogstens 6 controles per uur. Bij deze opdracht maken we één verbinding en lezen we alleen de banner en de sleutel van de server; er komt geen inlogpoging in je log.





Wat je invult en wat we vinden, slaan we niet op. Je browser onthoudt je antwoorden en of je de opdracht hebt gehaald. Ben je aangemeld, dan bewaren we alleen dat je de opdracht (bijna) goed had in Mijn cursussen; daar kun je het ook verwijderen.

Verder lezen

Even geduld…

Stel je domeinen in

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

Je domeinen laden…