SSH-sleutels maken en gebruiken
Module 2: SSH en sleutels · Leestijd: 10 minuten
Leerdoel: Na deze les kun je een sleutelpaar maken, de publieke sleutel op je server zetten, inloggen zonder wachtwoord en je privésleutel zo bewaren dat een verloren laptop geen ramp wordt.
Kernbegrippen: sleutelpaar, publieke sleutel, privésleutel, ed25519, RSA, passphrase, ssh-agent, ssh-copy-id, authorized_keys, rechten 700 en 600, sleutel per apparaat, FIDO2-sleutel
Waarom sleutels beter zijn dan wachtwoorden
In les 1.3 logde je in met een wachtwoord. Dat werkt, maar een server op internet krijgt vanaf de eerste minuut bezoek van programma's die wachtwoorden raden. Kijk maar eens in het log van een verse server:
root@web1:~# journalctl -u ssh --since "1 hour ago" | grep -c "Failed password"
214Honderden pogingen per uur is normaal. Een sterk wachtwoord houdt ze tegen, maar je hebt een zwakke plek gemaakt die je niet nodig hebt. Met een SSH-sleutel is raden zinloos: er is niets te raden dat in een woordenlijst staat.
Een sleutel bestaat uit twee delen die bij elkaar horen, een sleutelpaar:
- De privésleutel blijft op je eigen computer. Wie dit bestand heeft (en de passphrase kent), kan inloggen. Deel hem met niemand, ook niet met je aanbieder of met een helpdesk.
- De publieke sleutel geef je aan de server. Die mag iedereen zien: je kunt er niet mee inloggen, alleen mee controleren.
Bij het inloggen stuurt de server geen wachtwoord over de lijn. Je computer bewijst met een handtekening dat hij de privésleutel heeft, en de server controleert die handtekening met de publieke sleutel. Ook als iemand meekijkt op het netwerk, ziet hij niets wat hij later kan hergebruiken.
Een sleutel maken
Je maakt de sleutel op je eigen computer, niet op de server. Op Windows 10 en 11, macOS en Linux zit ssh-keygen er al in. Open PowerShell of Terminal:
anna@laptop:~$ ssh-keygen -t ed25519 -C "anna@laptop 2026"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/anna/.ssh/id_ed25519):
Enter passphrase for "/home/anna/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/anna/.ssh/id_ed25519
Your public key has been saved in /home/anna/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026Wat gebeurt hier?
-t ed25519kiest het type. Ed25519 is kort, snel en veilig, en sinds OpenSSH 9.5 ook het standaardtype als je niets opgeeft. Moet je een oud systeem bedienen dat ed25519 niet kent, neem dan RSA met minstens 3072 bits:ssh-keygen -t rsa -b 4096. Oudere typen als DSA zijn uit OpenSSH verwijderd; gebruik ze niet.-Cis alleen een opmerking. Zet er iets in waaraan je later ziet van welk apparaat de sleutel is. Dat helpt enorm als je een sleutel moet intrekken.- De passphrase versleutelt de privésleutel op je schijf. Wordt je laptop gestolen, dan heeft de dief een versleuteld bestand. Zonder passphrase heeft hij direct toegang tot al je servers.
Je hebt nu twee bestanden:
| Bestand | Wat | Delen? |
|---|---|---|
~/.ssh/id_ed25519 | Privésleutel | Nooit |
~/.ssh/id_ed25519.pub | Publieke sleutel, één regel tekst | Ja, naar de server |
Op Windows staan ze in C:\Users\anna\.ssh\. De publieke sleutel is één regel die begint met ssh-ed25519:
anna@laptop:~$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHk2... anna@laptop 2026De publieke sleutel op de server zetten
De server zoekt publieke sleutels in het bestand ~/.ssh/authorized_keys van de gebruiker waarmee je inlogt. Elke regel is één sleutel. Er zijn drie manieren om je sleutel daar te krijgen:
1. Bij de installatie. De meeste aanbieders hebben bij het aanmaken of opnieuw installeren van een VPS een veld voor je publieke sleutel. Bij WebOké heet dat veld "SSH-sleutel" in het VPS-scherm; bij andere aanbieders werkt het vergelijkbaar. Dit is de beste manier: dan hoeft er nooit een wachtwoord aan te staan.
2. Met ssh-copy-id (macOS en Linux), terwijl wachtwoordlogin nog werkt:
anna@laptop:~$ ssh-copy-id anna@192.0.2.10
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
anna@192.0.2.10's password:
Number of key(s) added: 13. Met de hand, bijvoorbeeld vanaf Windows of via de console van je aanbieder. Plak de regel uit je .pub-bestand in authorized_keys en zet de rechten goed:
anna@web1:~$ mkdir -p ~/.ssh
anna@web1:~$ nano ~/.ssh/authorized_keys
anna@web1:~$ chmod 700 ~/.ssh
anna@web1:~$ chmod 600 ~/.ssh/authorized_keysDie rechten zijn geen detail. De SSH-server controleert ze (de instelling StrictModes staat standaard aan): als anderen in jouw .ssh-map of je thuismap mogen schrijven, negeert hij je sleutels. Je ziet dan gewoon weer een wachtwoordvraag, zonder duidelijke foutmelding. Hoe je rechten leest, leer je in les 3.1.
Test daarna in een nieuw venster:
anna@laptop:~$ ssh anna@192.0.2.10
Enter passphrase for key '/home/anna/.ssh/id_ed25519':
anna@web1:~$De vraag komt nu van je eigen computer (de passphrase van je sleutel), niet meer van de server.
ssh-agent: één keer ontgrendelen
Elke keer een passphrase intikken is lastig. De ssh-agent houdt je ontgrendelde sleutel in het geheugen zolang je bent ingelogd op je computer:
anna@laptop:~$ ssh-add ~/.ssh/id_ed25519
Enter passphrase for /home/anna/.ssh/id_ed25519:
Identity added: /home/anna/.ssh/id_ed25519 (anna@laptop 2026)
anna@laptop:~$ ssh-add -l
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)Op macOS koppelt de agent aan de sleutelhanger, op Windows is het de dienst "OpenSSH Authentication Agent" (eenmalig aanzetten in Services). Zo heb je het gemak van geen wachtwoord en toch een versleutelde sleutel op schijf.
Let op met agent forwarding (ssh -A): daarmee mag de server waarop je inlogt jouw agent gebruiken. Wie root is op die server, kan dan met jouw sleutel verder. Gebruik het alleen op servers die je volledig vertrouwt, of gebruik ProxyJump (les 2.3).
Eén sleutel per apparaat, en weten welke waar staan
Een veelgemaakte fout: één privésleutel kopiëren naar laptop, pc en telefoon. Raak je één apparaat kwijt, dan moet je overal de sleutel vervangen en alle apparaten opnieuw inrichten. Beter:
- maak op elk apparaat een eigen sleutel, met een duidelijke opmerking (
-C "anna@telefoon"); - zet alle publieke sleutels in
authorized_keys, één per regel; - ben je een apparaat kwijt, haal dan alleen die ene regel weg.
Bekijk regelmatig welke sleutels toegang hebben:
anna@web1:~$ ssh-keygen -lf ~/.ssh/authorized_keys
256 SHA256:q3J8vX0bT2kPz9mWc1nR4sLh7uYdE5aF6gBiC0oN2xQ anna@laptop 2026 (ED25519)
256 SHA256:Zt5oP1yW8eQ3rK6sV0bN9mD2xA4cH7jL1uI5fG8tE3w anna@telefoon (ED25519)Staat er een sleutel bij die je niet herkent, dan is dat een alarmsignaal (les 10.3). Inbrekers zetten graag hun eigen sleutel in authorized_keys om later terug te komen.
Een hardwaresleutel (FIDO2, zoals een YubiKey) kan ook. Met ssh-keygen -t ed25519-sk staat het geheime deel op de sleutel zelf en moet je hem aanraken bij elk gebruik. Een gestolen bestand is dan waardeloos. Dat is een mooie stap verder, maar niet nodig om te beginnen.
Je privésleutel kwijt?
Raak je je enige privésleutel kwijt en staat wachtwoordlogin uit, dan kom je via SSH niet meer binnen. Daarom:
- zet altijd minstens twee sleutels op de server (bijvoorbeeld laptop en pc);
- weet hoe de console van je aanbieder werkt (les 1.2). Daar log je in alsof je een toetsenbord aan de server hangt, en dat werkt ook zonder SSH. Bij WebOké heet dat Console in het VPS-scherm; andere aanbieders noemen het VNC-console, webconsole of noodconsole.
Op AlmaLinux en Rocky Linux
Alles in deze les werkt hetzelfde. Eén extra valkuil: met SELinux aan moet ~/.ssh het juiste beveiligingslabel hebben. Heb je de map met de hand gemaakt of gekopieerd en wordt je sleutel genegeerd, dan herstelt restorecon -Rv ~/.ssh dat.
Samenvatting
- Een sleutelpaar bestaat uit een privésleutel (blijft bij jou) en een publieke sleutel (gaat naar de server, in
~/.ssh/authorized_keys). - Maak sleutels met
ssh-keygen -t ed25519op je eigen computer, met een passphrase; gebruik ssh-agent voor het gemak. - Rechten tellen:
~/.sshop 700 enauthorized_keysop 600, anders negeert de server je sleutel. - Eén sleutel per apparaat, met een duidelijke opmerking, zodat je er één kunt intrekken.
- Zorg voor een tweede sleutel en ken de console van je aanbieder als noodingang.
Quiz
Opdracht
Opdracht O2.1: Een sleutel maken en gebruiken. Maak op je eigen computer een ed25519-sleutel met een passphrase en een duidelijke opmerking, zet hem op je server (via het veld van je aanbieder, ssh-copy-id of met de hand), controleer de rechten en log in een nieuw venster in met de sleutel. Vul daarna de vingerafdruk van je sleutel in (uit ssh-keygen -lf ~/.ssh/id_ed25519.pub) en beantwoord de vragen over waar je privésleutel staat en wat je doet als je hem kwijtraakt. Het programma controleert alleen of de vingerafdruk de goede vorm heeft; de rest is zelf doen.
Opdracht O2.1: Een sleutel maken en gebruiken
Deze opdracht doe je zelf; niemand kijkt hem na. Vink af wat je gedaan hebt en markeer de opdracht als gedaan.
De privésleutel blijft op je eigen apparaat, versleuteld met een passphrase, niet in een cloudmap of mail. Bij diefstal haal je de regel van dat apparaat uit authorized_keys op elke server en maak je een nieuwe sleutel. Plak nooit je privésleutel, ook niet hier.
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 het VPS-scherm en de panelen van WebOké; bij andere aanbieders werkt het vergelijkbaar.
- Inloggen op je VPS met SSH (en een SSH-sleutel maken)
- DirectAdmin handleiding 15.2: SSH Sleutels en inloggen met SSH
- Geen toegang meer tot je VPS: wat nu?
- Handleiding ssh-keygen: https://man.openbsd.org/ssh-keygen
- OpenSSH 9.5 release notes (ed25519 standaard): https://www.openssh.org/txt/release-9.5
