retrAIt Plan jouw dag ↗
Blog / Je eigen server

Inloggen op je server met een sleutel in plaats van een wachtwoord

6 minuten lezenDelen

Twee handen met ringen rusten op een stapel oude sierlijke sleutels op een grijze houten tafel
Foto Meruyert Gonullu via Pexels
Het korte antwoord

Een SSH-sleutel bestaat uit twee bestanden: het publieke deel zet je op je server, het privédeel blijft op je laptop. Je maakt ze met één commando, ssh-keygen -t ed25519, en beschermt het privédeel met een wachtwoordzin. Met een korte naam in ~/.ssh/config log je daarna in met ssh mijnserver.

Elke server op internet krijgt de hele dag bezoek van programma’s die wachtwoorden proberen te raden. Met een SSH-sleutel heb je daar geen last van. Je maakt hem één keer, op je laptop, met één commando. Daarna log je in zonder wachtwoord, en heeft raden geen zin meer. Op een server die met het script van retrAIt is ingericht, staat inloggen met een wachtwoord zelfs helemaal uit.

Alles hieronder typ je in de terminal van je laptop, niet op een server. Heb je nog nooit een terminal geopend, lees dan eerst De terminal voor beginners.

Een slot en een sleutel

SSH is de beveiligde verbinding tussen de terminal op je laptop en je server. Een SSH-sleutel bestaat uit twee bestanden die bij elkaar horen: een sleutelpaar.

Het publieke deel werkt als een slot. Dat zet je op je server, en iedereen mag het zien. Het privédeel is de enige sleutel die op dat slot past, en die blijft op je laptop. Maak je verbinding, dan bewijst je laptop dat hij het privédeel heeft, zonder het op te sturen. Er gaat dus niets over de lijn waarmee een ander later als jou kan inloggen.

Microsoft zegt het in de uitleg over sleutels in OpenSSH zonder omwegen: een privésleutel staat gelijk aan een wachtwoord. Wie het bestand in handen krijgt, kan als jou inloggen op elke server waar jouw publieke deel op staat; alleen een wachtwoordzin houdt hem dan nog tegen. Je geeft het daarom aan niemand, ook niet aan mij en niet aan Claude. Vraagt iemand om je sleutel, dan geef je alleen de regel uit het publieke deel.

De sleutel maken

Op een Mac open je Terminal, op Windows PowerShell. Windows 10 en 11 hebben de SSH-programma’s al aan boord. Kent PowerShell het commando toch niet, voeg dan bij Instellingen onder Optionele onderdelen de OpenSSH Client toe. Het commando is op allebei hetzelfde:

ssh-keygen -t ed25519 -C "fatima-laptop"

ssh-keygen maakt het sleutelpaar. Met -t ed25519 kies je de soort sleutel, een moderne soort met korte sleutels. Sinds versie 9.5 uit 2023 maakt OpenSSH die soort ook als je niets opgeeft, zo staat in de lijst met wijzigingen van OpenSSH. Door hem toch te noemen, weet je zeker dat je hem krijgt, ook op een laptop met een oudere versie. Achter -C zet je een label, zodat je later ziet welke sleutel bij welk apparaat hoort.

Het programma stelt daarna een paar vragen. Eerst waar de sleutel moet komen: druk op Enter, de voorgestelde plek is goed. Vraagt hij Overwrite (y/n)?, typ dan n. Er staat dan al een sleutel op deze laptop, en die gebruik je gewoon. Overschrijf je hem, dan kom je niet meer op servers waar de oude op stond. Daarna vraagt hij om een wachtwoordzin, twee keer.

Je sleutels staan daarna in de verborgen map .ssh in je thuismap. id_ed25519 is het privédeel, id_ed25519.pub het publieke. Met cat ~/.ssh/id_ed25519.pub zie je het publieke deel op een Mac; op Windows typ je Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub. Je ziet één lange regel die begint met ssh-ed25519 en eindigt met je label. Die regel heb je straks nodig.

Een goede wachtwoordzin

De wachtwoordzin is een extra slot op je privédeel. Raakt je laptop kwijt en kopieert iemand het bestand, dan heeft hij er zonder die zin niets aan. Microsoft raadt een lege wachtwoordzin af, omdat zin en bestand samen een dubbele beveiliging vormen. Kies een zin van een paar woorden en bewaar hem meteen in je wachtwoordbeheerder. Terwijl je hem typt, verschijnt er niets op het scherm, ook geen sterretjes. Dat hoort zo; typ gewoon door en druk op Enter.

Elke keer die zin intypen hoeft niet. Op een Mac onthoudt je sleutelhanger hem als je in ~/.ssh/config de regels UseKeychain yes en AddKeysToAgent yes zet. Apple beschrijft die instelling in een technische notitie over SSH. Op Windows kan de dienst ssh-agent iets vergelijkbaars, maar die moet je eerst als beheerder aanzetten; de uitleg van Microsoft hierboven laat zien hoe. Zet de twee Mac-regels niet in een config-bestand op Windows, want daar kent SSH ze niet en stopt het met een foutmelding.

Het publieke deel op je server zetten

Op je server komt alleen het publieke deel. Huur je een server bij Hetzner, dan plak je de regel uit je .pub-bestand bij het aanmaken in het veld voor SSH-sleutels. Via het beheerscherm van Hetzner kan dat alleen op dat moment, niet achteraf. Ben je het vergeten, dan is de server verwijderen en opnieuw aanmaken meestal sneller dan repareren. Je betaalt per uur, dus dat kost vrijwel niets. Hoe het huren zelf gaat, lees je in Wat is een VPS.

Na het inrichten met het script van retrAIt log je met dezelfde sleutel in, maar dan met je eigen gebruikersnaam in plaats van als root. Een tweede apparaat, zoals een tweede laptop of je telefoon met een SSH-app, maakt zijn eigen sleutelpaar. Het publieke deel daarvan zet je op je server met één commando, met je gebruikersnaam en de hele regel tussen aanhalingstekens:

sudo add-key fatima "ssh-ed25519 AAAA... telefoon"

Kopieer je privédeel nooit naar een ander apparaat. Met een sleutel per apparaat trek je er later één in, als dat apparaat kwijtraakt, en blijven de andere gewoon werken. Op je server staan de sleutels die toegang hebben in het bestand ~/.ssh/authorized_keys, elk op een eigen regel met het label erachter.

Een voorbeeld. Fatima is fysiotherapeut en logt in vanaf haar laptop, en soms vanaf haar telefoon. Op een dag laat ze die telefoon in de trein liggen. Vanaf haar laptop logt ze in en vraagt ze Claude om de regel met het label telefoon uit ~/.ssh/authorized_keys te halen. Daarna kan de telefoon niets meer op haar server, en werkt haar laptop gewoon door. Had ze één sleutel voor alles gebruikt, dan had ze nu overal een nieuwe moeten zetten.

Een korte naam voor je server

Een IP-adres onthoud je niet. In het bestand ~/.ssh/config op je laptop, het adresboekje van SSH, geef je je server een korte naam:

Host mijnserver
  HostName 123.45.67.89
  User fatima

Host is de naam die je zelf kiest, HostName het IP-adres van je server en User je gebruikersnaam daar. Daarna typ je alleen nog ssh mijnserver. Ook scp, het commando waarmee je bestanden tussen laptop en server kopieert, kent de naam dan. Het bestand staat op je laptop, niet op je server. Maak je het op Windows met Kladblok, kijk dan of het niet als config.txt is bewaard.

De eerste keer dat je inlogt, vraagt je laptop of hij deze server kan vertrouwen, met een vingerafdruk erbij. Bij een server die je net zelf hebt gehuurd, typ je yes, voluit. Je laptop onthoudt de server daarna en vraagt het niet meer. Zie je later ooit een groot blok met REMOTE HOST IDENTIFICATION HAS CHANGED terwijl je je server niet opnieuw hebt geïnstalleerd, ga dan niet verder. Je laptop ziet dan een andere server dan de vorige keer, en dat wil je eerst begrijpen.

Krijg je Permission denied (publickey), dan herkent de server je sleutel niet. Meestal klopt de gebruikersnaam niet, of zit je op een apparaat waarvan de sleutel nog niet op de server staat. Probeer het dan niet tien keer achter elkaar. Op een server van retrAIt draait fail2ban, dat een adres een uur blokkeert als het binnen tien minuten vijf keer mislukt, en dat kan ook jouw adres zijn.

Maak vandaag je sleutelpaar, met een wachtwoordzin die je meteen in je wachtwoordbeheerder zet. Zet de regel uit je .pub-bestand klaar voor het moment dat je een server huurt. En behandel het privédeel zoals je elk geheim behandelt: het blijft op je laptop, net als de sleutels van je andere diensten, waarover meer in Wachtwoorden en API-sleutels in je code.

Foto bovenaan: Meruyert Gonullu via Pexels

Delen

Ken je iemand die hier iets aan heeft?

Stuur het door, of deel het als beeld in je story of op LinkedIn.

Als beeld, voor je story of een post

Op een telefoon deel je het beeld meteen, bijvoorbeeld als story op Instagram of in je WhatsApp-status. Op een computer bewaar je het. Zet de link erbij, in je bericht of als sticker.

Meer over je eigen server

Alles over je eigen server