Met een SSH-key log je in op een server met een cryptografisch sleutelpaar in plaats van een wachtwoord. Wachtwoorden zijn kwetsbaar voor brute-force-aanvallen, vermoeiend om telkens te typen en lastig te automatiseren in scripts. Authenticatie op basis van sleutels is zowel veiliger als veel handiger: je stelt het één keer in en logt daarna bij elke verbinding met één commando in. In deze gids leer je stap voor stap hoe je vanaf nul een sleutel genereert, deze op je server installeert en de instellingen toevoegt die dagelijks gebruik moeiteloos maken.
Hoe werkt een SSH-key?
Een SSH-key bestaat uit twee bestanden: een private key en een public key. De private key blijft alleen op jouw computer en wordt nooit gedeeld; de public key kopieer je naar elke server waarop je wilt inloggen. Bij het verbinden voert de server een controle uit tegen de public key en laat alleen een client toe die kan bewijzen dat hij de bijbehorende private key bezit. Dankzij deze asymmetrische aanpak gaat de private key nooit over het netwerk.
- Private key:
~/.ssh/id_ed25519— houd hem geheim, deel hem met niemand. - Public key:
~/.ssh/id_ed25519.pub— kopieer hem vrij naar servers.
Het sleutelpaar genereren
Op moderne systemen is het voorkeursalgoritme Ed25519: kort, snel en sterk. Voer dit commando uit in je terminal:
ssh-keygen -t ed25519 -C "naam@voorbeeld.com"
De optie -C voegt een opmerking (meestal een e-mailadres) toe aan de sleutel, wat helpt om meerdere sleutels uit elkaar te houden. Het commando vraagt om een opslagpad en een passphrase (wachtwoordzin). Druk op Enter om het standaardpad (~/.ssh/id_ed25519) te accepteren. De passphrase versleutelt je private key met een extra wachtwoord; het beschermt de sleutel als je computer wordt gestolen, dus het is af te raden om hem leeg te laten.
Als je systeem Ed25519 niet ondersteunt (zeer oude servers), is een RSA-sleutel van 4096 bits een veilig alternatief:
ssh-keygen -t rsa -b 4096 -C "naam@voorbeeld.com"
De public key op de server installeren
De handigste methode is het hulpprogramma ssh-copy-id. Het voegt je public key toe aan het bestand ~/.ssh/authorized_keys op de server met de juiste rechten:
ssh-copy-id gebruiker@server-ip
Dit commando vraagt nog één laatste keer om je wachtwoord; zodra het lukt, log je daarna in met de sleutel. Als ssh-copy-id niet beschikbaar is (bijvoorbeeld op Windows of een beperkte host), kun je de sleutel handmatig toevoegen:
cat ~/.ssh/id_ed25519.pub | ssh gebruiker@server-ip \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && \
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Rechten zijn cruciaal: de map ~/.ssh moet 700 zijn en het bestand authorized_keys 600. Verkeerde rechten zorgen ervoor dat SSH de sleutel om veiligheidsredenen weigert en stilletjes opnieuw om een wachtwoord vraagt.
De verbinding inkorten met ~/.ssh/config
In plaats van elke keer een lang commando te typen, maak je op je client een bestand ~/.ssh/config en definieer je een alias voor de verbinding:
Host mijnserver
HostName 46.202.156.61
User gebruiker
Port 22
IdentityFile ~/.ssh/id_ed25519
Na deze definitie volstaat ssh mijnserver; SSH gebruikt automatisch het juiste adres, de gebruiker, de poort en de sleutel. Dit is vooral handig bij hostingproviders die een niet-standaard poort gebruiken (bijvoorbeeld Port 65002).
De passphrase één keer invoeren met ssh-agent
Als je een passphrase hebt ingesteld, wil je hem niet bij elke verbinding typen. ssh-agent houdt je sleutel tijdens de sessie in het geheugen:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Op macOS kun je de sleutel in de Keychain bewaren om hem permanent te maken: ssh-add --apple-use-keychain ~/.ssh/id_ed25519. Op Linux starten de meeste desktopomgevingen de agent automatisch bij het inloggen, dus één keer ssh-add uitvoeren is genoeg.
Wachtwoordlogin uitschakelen en de beveiliging verstevigen
Zodra je hebt gecontroleerd dat inloggen met de sleutel werkt, verbetert het volledig uitschakelen van wachtwoordlogin op de server de beveiliging aanzienlijk. Bewerk /etc/ssh/sshd_config op de server:
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
Om de wijziging toe te passen, herstart je de SSH-service: sudo systemctl restart ssh (op sommige distributies sshd). Belangrijk: controleer vóór het toepassen van deze instelling altijd in een aparte terminal of je met de sleutel kunt inloggen; anders sluit je jezelf misschien buiten van de server.
Dezelfde sleutel gebruiken bij diensten zoals GitHub
Je kunt dezelfde SSH-key ook gebruiken bij Git-hostingdiensten. Kopieer de inhoud van je public key en plak die in de SSH-keys-sectie van je GitHub/GitLab-instellingen:
cat ~/.ssh/id_ed25519.pub
Test daarna de verbinding met ssh -T git@github.com. Zo werken git push en git pull veilig met de sleutel, zonder om een wachtwoord te vragen.
Veelgestelde vragen
Wat gebeurt er als ik mijn private key verlies?
Zonder back-up van de private key moet je opnieuw toegang krijgen tot elke server waarop hij inlogt door een nieuwe sleutel te genereren en te installeren. Maak dus een back-up van je private key op een veilige plek en plak hem nooit in een openbare repository of chatkanaal.
Kan ik vanaf meerdere computers op dezelfde server inloggen?
Ja. Het is het beste om op elke computer een aparte sleutel te genereren en de public key van elk toe te voegen aan het bestand authorized_keys op de server. Zo verwijder je bij verlies van een apparaat alleen die sleutel en blijven de andere onaangetast.
Is het veilig om de passphrase leeg te laten?
Geautomatiseerde scripts en CI/CD-omgevingen hebben soms een sleutel zonder passphrase nodig, maar gebruik er op je persoonlijke machine altijd een. Een passphrase maakt de private key op zichzelf onbruikbaar, zelfs als het bestand in verkeerde handen valt.
Wil je je server veilig en soepel opzetten? Heb je hulp nodig met SSH-hardening, deployment-automatisering of serverbeheer, neem dan contact met me op.