Je maakt een SSH-sleutel aan, zet hem op je VPS en logt voortaan in zonder wachtwoord. Tot slot schakel je inloggen met een wachtwoord uit, zodat wachtwoorden raden geen zin meer heeft. De stappen gelden voor Windows, macOS, Linux en PuTTY.
Wat je nodig hebt
- Een VPS bij StormHost met Ubuntu 24.04 of Debian 13
- Een werkende SSH-verbinding met een wachtwoord (handleiding)
- Een computer met Windows 10/11, macOS of Linux
- Ongeveer 15 minuten
Hoe een SSH-sleutel werkt#
Een SSH-sleutel bestaat uit twee bestanden die bij elkaar horen:
| Bestand | Voorbeeldnaam | Waar het staat | Aan wie je het geeft |
|---|---|---|---|
| Privésleutel | id_ed25519 (PuTTY: .ppk) | Alleen op je eigen computer. | Aan niemand. Wie hem heeft, logt in als jij. |
| Publieke sleutel | id_ed25519.pub | Op de VPS in het bestand ~/.ssh/authorized_keys. | Je mag hem overal neerzetten, misbruiken kan niet. |
Bij het inloggen stuurt de VPS je computer een opgave die alleen de houder van de privésleutel kan oplossen. De privésleutel verlaat je computer daarbij nooit. Een sleutel van het type ed25519 is modern, kort en veilig, en alle huidige systemen ondersteunen hem.
Je kunt de privésleutel bovendien vergrendelen met een sleutelwachtwoord (passphrase). Als iemand het sleutelbestand kopieert, kan hij er zonder dat wachtwoord niets mee.
Een sleutel aanmaken#
Windows
Open Terminal (klik met de rechtermuisknop op Start › Terminal, in Windows 10 Windows PowerShell).
Voer uit:
PowerShell ssh-keygen -t ed25519 -C "notebook-jan"Druk bij de vraag
Enter file in which to save the key (C:\op Enter. De sleutel wordt opgeslagen op de standaardlocatie, waar SSH hem zelf vindt.Users\ jan/ .ssh/ id_ ed25519): Voer bij de vraag
Enter passphraseeen sleutelwachtwoord in en druk op Enter. Herhaal het bijEnter same passphrase again. Het wachtwoord wordt niet getoond. Laat je het leeg, dan is de sleutel niet vergrendeld.
Resultaat: de bestanden C:\ (privé) en id_ed25519.pub (publiek).
macOS
Open de app Terminal.
Voer uit:
bash ssh-keygen -t ed25519 -C "macbook-jan"Druk bij de vraag
Enter file in which to save the keyop Enter.Voer het sleutelwachtwoord (passphrase) in en herhaal het.
Resultaat: ~/.ssh/id_ed25519 en ~/.ssh/id_ed25519.pub.
Linux
Open een terminal.
Voer uit:
bash ssh-keygen -t ed25519 -C "pc-jan"Druk bij de vraag
Enter file in which to save the keyop Enter.Voer het sleutelwachtwoord (passphrase) in en herhaal het.
Resultaat: ~/.ssh/id_ed25519 en ~/.ssh/id_ed25519.pub.
Wat het commando doet:
ssh-keygen– het programma waarmee je SSH-sleutels aanmaakt.-t ed25519– het sleuteltype. We raden Ed25519 aan. Gebruik het oudere type RSA alleen voor apparaten die ed25519 niet aankunnen, en dan met de lengte-t rsa -b 4096.-C "notebook-jan"– een label (commentaar) aan het einde van de publieke sleutel. Daaraan zie je op de VPS van welke computer de sleutel is. Het label beveiligt niets, het is alleen ter oriëntatie.
Heb je al een sleutel?
Als ssh-keygen meldt … already exists. Overwrite (y/n)?, antwoord dan n. Door te overschrijven raak je de oude sleutel kwijt, en daarmee de toegang tot alles waar je hem gebruikt. Je kunt de oude sleutel gerust ook voor de VPS gebruiken.
Een sleutel aanmaken in PuTTYgen#
Maak je verbinding via PuTTY, maak de sleutel dan aan in het programma PuTTYgen, dat samen met PuTTY wordt geïnstalleerd.
- Start PuTTYgen.
- Kies bij Parameters het type EdDSA en daarnaast Ed25519 (255 bits).
- Klik op Generate en beweeg de muis over het lege vlak van het venster tot de voortgangsbalk vol is. De muisbeweging dient als bron van willekeur.
- Typ in het veld Key comment een label, bijvoorbeeld
notebook-jan. - Voer in de velden Key passphrase en Confirm passphrase een sleutelwachtwoord in.
- Klik op Save private key en sla het bestand op, bijvoorbeeld als
C:\. Dit is de privésleutel.Users\ <USER>\ .ssh\ vps. ppk - Selecteer en kopieer de volledige tekst in het veld Public key for pasting into OpenSSH authorized_keys file. Die begint met
ssh-ed25519 AAAA…en eindigt met het label. Dit is de publieke sleutel, die je handmatig op de VPS zet (zie het tabblad Handmatig hieronder).
De knop Save public key slaat de publieke sleutel op in een ander formaat, dat de VPS niet accepteert. Kopieer altijd de tekst uit het veld.
De publieke sleutel op de VPS zetten#
Windows
Windows heeft het commando ssh-copy-id niet. Dit commando in PowerShell doet hetzelfde werk (vervang 203.0.113.10 door het IP-adres van je VPS):
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"type $env:– toont de inhoud van de publieke sleutel (USERPROFILE\ .ssh\ id_ ed25519. pub $env:USERPROFILEis jouw mapC:\Users\<USER>).|– geeft de uitvoer als invoer door aan het volgende commando.ssh [email protected] "…"– maakt verbinding met de VPS (vraagt om het rootwachtwoord) en voert de commando's tussen aanhalingstekens uit.mkdir -p ~/.ssh– maakt de map.sshaan als die nog niet bestaat.chmod 700 ~/.ssh– alleen de eigenaar mag de map openen. SSH weigert te ruime rechten.cat >> ~/.ssh/authorized_keys– voegt de sleutel toe aan het einde van het bestand. Sleutels die er al staan, blijven staan.chmod 600 ~/.ssh/authorized_keys– alleen de eigenaar mag het bestand lezen en wijzigen.
macOS
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]ssh-copy-id– zet de publieke sleutel op de server en stelt de juiste rechten in.-i ~/.ssh/id_ed25519.pub– welke sleutel je wilt overzetten.[email protected]– de gebruiker en het adres van de VPS.
Het commando vraagt om het rootwachtwoord en toont aan het einde Number of key(s) added: 1.
Linux
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]ssh-copy-id– zet de publieke sleutel op de server en stelt de juiste rechten in.-i ~/.ssh/id_ed25519.pub– welke sleutel je wilt overzetten.
Het commando vraagt om het rootwachtwoord en toont aan het einde Number of key(s) added: 1.
Handmatig
Handig voor een sleutel uit PuTTYgen of als de vorige methoden bij jou niet werken.
Maak met een wachtwoord verbinding met de VPS (PuTTY, een terminal of de console in de browser).
Maak de map klaar en open het bestand met sleutels:
bash mkdir -p ~/.ssh && chmod 700 ~/.ssh nano ~/.ssh/authorized_keysPlak de publieke sleutel op een eigen regel (in PuTTY met de rechtermuisknop). De hele sleutel moet op één regel staan:
ssh-ed25519 AAAA… label.Sla op (Ctrl+O, Enter) en sluit de editor (Ctrl+X).
Stel de rechten in:
bash chmod 600 ~/.ssh/authorized_keys
Inloggen met de sleutel#
Een sleutel op de standaardlocatie (id_ed25519) vindt de SSH-client zelf, het gewone commando is genoeg:
ssh [email protected]Heb je de sleutel een wachtwoord gegeven, dan vraagt de client Enter passphrase for key. Je voert het wachtwoord van de sleutel in, niet het rootwachtwoord.
Een sleutel die ergens anders of onder een andere naam is opgeslagen, geef je op met de optie -i:
ssh -i ~/.ssh/vps_klic [email protected]-i ~/.ssh/vps_klic– het pad naar de privésleutel (het bestand zonder.pub).
PuTTY:
- Start PuTTY en laad de opgeslagen sessie (Load), of vul het IP-adres in.
- Open in de boom links Connection › SSH › Auth › Credentials.
- Klik bij het veld Private key file for authentication op Browse en kies het
.ppk-bestand. - Optioneel: vul onder Connection › Data bij Auto-login username
rootin. - Ga terug naar Session, klik op de naam van de sessie en op Save, zodat je dit de volgende keer niet opnieuw hoeft in te stellen.
- Klik op Open.
Een sleutel uit ssh-keygen kun je ook in PuTTY gebruiken: klik in PuTTYgen op Load, kies het bestand id_ed25519 (zet het bestandsfilter op All Files) en sla het via Save private key op als .ppk. Andersom zet je een sleutel uit PuTTYgen om naar het OpenSSH-formaat via Conversions › Export OpenSSH key.
ssh-agent: het sleutelwachtwoord maar één keer#
ssh-agent onthoudt de ontgrendelde sleutel, zodat je het sleutelwachtwoord niet bij elke verbinding hoeft in te voeren.
Windows
Schakel in PowerShell, gestart als administrator, de service van de agent in (die staat standaard uit):
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agentSet-Service -StartupType Automatic– de agent start voortaan mee met het systeem.Start-Service ssh-agent– start de agent meteen.
Voeg daarna in een gewoon venster de sleutel toe (er wordt om het sleutelwachtwoord gevraagd):
ssh-add $env:USERPROFILE\.ssh\id_ed25519macOS
ssh-add --apple-use-keychain ~/.ssh/id_ed25519--apple-use-keychain– slaat het sleutelwachtwoord op in de Sleutelhanger van macOS.
Om SSH het wachtwoord uit de Sleutelhanger ook na een herstart van je Mac vanzelf te laten gebruiken, zet je dit aan het begin van het bestand ~/.ssh/config (zie het volgende onderdeel):
Host *
UseKeychain yes
AddKeysToAgent yesUseKeychain yes– het sleutelwachtwoord wordt uit de Sleutelhanger gelezen (alleen macOS).AddKeysToAgent yes– de ontgrendelde sleutel wordt bij het eerste gebruik aan de agent toegevoegd.
Linux
De meeste desktopomgevingen starten de agent zelf. Je voegt de sleutel toe met het commando:
ssh-add ~/.ssh/id_ed25519Controle: ssh-add -l toont de vingerafdrukken van de sleutels die de agent heeft geladen.
Het bestand ~/.ssh/config: verbinden met één woord#
Sla de instellingen van je VPS op in het bestand config in de map .ssh (Windows: C:\, zonder extensie):
Host mojevps
HostName 203.0.113.10
User root
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes| Directive | Wat het doet |
|---|---|
Host mojevps | De afkorting die je typt in plaats van het adres. Geldt voor de regels eronder. |
HostName | Het echte IP-adres of domein van de VPS. |
User | De gebruiker waarmee je inlogt. |
Port | De SSH-poort. Pas hem aan als je SSH naar een andere poort hebt verplaatst. |
IdentityFile | De privésleutel voor deze VPS. |
IdentitiesOnly yes | Alleen de sleutel uit IdentityFile proberen, niet alle sleutels uit de agent. Zo voorkom je de fout Too many authentication failures. |
Daarna maak je verbinding met het commando ssh mojevps. Ook scp en sftp gebruiken de afkorting.
Inloggen met een wachtwoord uitschakelen#
Zolang inloggen met een wachtwoord aanstaat, kunnen bots het blijven proberen. Na het uitschakelen accepteert de VPS alleen nog een sleutel.
Wat het uitschakelen van het wachtwoord in je klantaccount verandert
De tabbladen Bestanden en Databases loggen met een wachtwoord in op de VPS. Na het uitschakelen van het wachtwoord werken ze niet meer. Zet bestanden dan over met een SFTP-client met sleutel (WinSCP en FileZilla kunnen allebei met een sleutel overweg) en beheer de database via een SSH-tunnel. De console in de browser blijft werken. Een overzicht van alle gevolgen staat in de handleiding Een nieuwe VPS beveiligen.
Controleer eerst of inloggen met de sleutel werkt
Als je het wachtwoord uitschakelt en de sleutel werkt niet, kom je er via SSH niet meer in. Open voordat je verdergaat een nieuw venster en log in met de sleutel, zonder het rootwachtwoord in te voeren. Laat het oorspronkelijke venster de hele tijd open. Gaat er toch iets mis, log dan via de console in de browser in met het rootwachtwoord en verwijder het bestand uit stap 1.
Maak een eigen configuratiebestand voor de SSH-server aan (of open het):
bash nano /etc/ssh/sshd_config.d/00-zabezpeceni.confPlak de instellingen:
/etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-passwordStaat in het bestand al
PermitRootLogin no(uit de handleiding Een nieuwe VPS beveiligen), laat de laatste regel dan weg.Instelling Wat het doet Aanbevolen waarde Wanneer wijzigen PasswordAuthenticationStaat inloggen met een wachtwoord toe. noNooit, als je het wachtwoord uitgeschakeld wilt houden. KbdInteractiveAuthenticationEen andere manier om een wachtwoord in te voeren (een interactieve prompt). Ook met PasswordAuthenticationuitgeschakeld zou je hierlangs een wachtwoord kunnen invoeren.noyesalleen voor tweestapsverificatie via PAM (gevorderd).PubkeyAuthenticationStaat inloggen met een sleutel toe. De standaardwaarde is yes, we noemen hem voor de zekerheid.yesNooit. PermitRootLoginInloggen als root. prohibit-password= root alleen met een sleutel.prohibit-passwordno, als je onder een eigen gebruiker metsudowerkt.Sla op en sluit de editor.
Controleer of precies jouw waarden gelden:
bash sshd -t && sshd -T | grep -Ei "^(passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication|permitrootlogin)"sshd -t– controleert de syntaxis van de configuratie. Bij een fout toont het het bestand en de regel, en het volgende commando wordt niet uitgevoerd.sshd -T– toont de uiteindelijke geldende configuratie na het inlezen van alle bestanden.grep -Ei "…"– selecteert alleen de vier instellingen waar het om gaat.
De uitvoer moet deze vier regels bevatten (de volgorde kan afwijken):
Uitvoertext permitrootlogin without-password pubkeyauthentication yes passwordauthentication no kbdinteractiveauthentication nowithout-passwordis de oudere naam voorprohibit-passworden betekent hetzelfde. Ubuntu 24.04 en Debian 13 tonen de oudere naam, nieuwere versies van OpenSSH tonenprohibit-password. Heb jenoingesteld, dan zie jepermitrootlogin no.Toont een regel een andere waarde (meestal
passwordauthentication yes), dan staat dezelfde instelling in een bestand dat eerder wordt ingelezen. Je vindt het met het commandogrep -rni "passwordauthentication" /etc/ssh/sshd_config.d/. Zet de regel daarin uit met het teken#aan het begin en herhaal de controle.Herstart de SSH-server:
bash systemctl restart sshDe huidige verbinding blijft open.
Probeer in een nieuw venster inloggen met een wachtwoord af te dwingen:
bash ssh -o PubkeyAuthentication=no [email protected]De server moet antwoorden met
Permission denied (publickey).Dat klopt: hij accepteert geen wachtwoord meer.Log in nog een venster gewoon in met de sleutel (
ssh [email protected]). Sluit het oorspronkelijke venster pas als dat werkt.
Waarom het bestand 00-zabezpeceni.conf
De SSH-server leest eerst de bestanden uit de map /etc/ssh/sshd_config.d/ (op alfabetische volgorde) en daarna het hoofdbestand /etc/ssh/sshd_config. Voor elke instelling geldt de eerste waarde die wordt gevonden. Op de VPS kan een bestand staan als 50-cloud-init.conf met PasswordAuthentication yes. Dankzij het getal 00 wordt jouw bestand eerder ingelezen en winnen jouw waarden. De controle met sshd -T bevestigt dat altijd.
Meerdere computers, een sleutel verwijderen en back-uppen#
- Nog een computer: maak daarop een eigen sleutel aan met een ander label en zet hem op dezelfde manier over. Elke sleutel staat in
~/.ssh/authorized_keysop een eigen regel. We raden af om één privésleutel tussen computers te kopiëren. - Een sleutel verwijderen (verloren laptop, vertrek van een collega): open
nano ~/.ssh/authorized_keysen verwijder de regel met zijn label. Dat geldt direct. - Back-up: bewaar de privésleutel in een wachtwoordmanager of op versleutelde opslag. Raak je hem kwijt terwijl het wachtwoord is uitgeschakeld, log dan in via de console in de browser en zet een nieuwe publieke sleutel op de VPS.
- Een andere gebruiker dan root: de sleutel hoort in
/home/en die gebruiker moet eigenaar van het bestand zijn.<USER>/ .ssh/ authorized_ keys
Controle#
ssh root@<VPS_IP_ADDRESS>logt je in zonder rootwachtwoord (hooguit wordt om het sleutelwachtwoord gevraagd).ssh -o PubkeyAuthentication=no root@<VPS_IP_ADDRESS>eindigt metPermission denied (publickey).sshd -Ttoontpasswordauthentication no.
Als iets niet werkt#
De VPS blijft om het rootwachtwoord vragen#
De sleutel is niet gebruikt. Maak verbinding met uitgebreide uitvoer:
ssh -v [email protected]-v– uitgebreide uitvoer. Zoek naar de regelsOffering public key(de client heeft de sleutel aangeboden) enServer accepts key(de server heeft hem geaccepteerd).
Biedt de client de sleutel niet aan, dan staat hij in een ander bestand: gebruik -i of IdentityFile. Accepteert de server hem niet, controleer dan de rechten op de VPS:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
journalctl -u ssh -n 30journalctl -u ssh -n 30– de laatste 30 logregels van de SSH-server. De meldingAuthentication refused: bad ownership or modesbetekent verkeerde rechten of een verkeerde eigenaar van de map.ssh.
Controleer ook of de sleutel in authorized_keys op één regel staat en begint met ssh-ed25519.
Permission denied (publickey).#
Het wachtwoord is uitgeschakeld en de server heeft de sleutel niet geaccepteerd. Ga te werk zoals in het vorige punt. Kom je er helemaal niet meer in, gebruik dan de console in de browser.
Windows: WARNING: UNPROTECTED PRIVATE KEY FILE! of Bad permissions#
Ook andere gebruikers van de computer hebben toegang tot de privésleutel (meestal na kopiëren vanaf een andere plek) en de client weigert hem te gebruiken. Stel de rechten in PowerShell in:
icacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r
icacls $env:USERPROFILE\.ssh\id_ed25519 /grant:r "$($env:USERNAME):(R)"/inheritance:r– verwijdert de rechten die van de map zijn overgeërfd./grant:r "<USER>:(R)"– geeft alleen jouw account leesrecht.
Op macOS en Linux los je dezelfde fout op met het commando chmod 600 ~/.ssh/id_ed25519.
Load key "…": invalid format#
Je probeert in OpenSSH een sleutel in PuTTY-formaat (.ppk) te gebruiken. Zet hem in PuTTYgen om via Conversions › Export OpenSSH key.
PuTTY: Server refused our key#
Op de VPS staat niet de juiste publieke sleutel. Kopieer opnieuw de tekst uit het veld Public key for pasting into OpenSSH authorized_keys file (niet het bestand van Save public key) en plak hem op één regel in ~/.ssh/authorized_keys.
Too many authentication failures#
De agent biedt te veel sleutels aan. Gebruik IdentitiesOnly yes in ~/.ssh/config, of de opties -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes.
Samenvatting
- De privésleutel blijft alleen op je computer, de publieke sleutel hoort in
~/.ssh/authorized_keysop de VPS. - Je maakt de sleutel aan met het commando
ssh-keygen -t ed25519 -C "label"of in PuTTYgen (EdDSA, Ed25519). - Overzetten:
ssh-copy-id(macOS, Linux), in Windowstype … | ssh …, of handmatig. - Je schakelt het wachtwoord uit met het bestand
/etc/en controleert het resultaat met het commandossh/ sshd_ config. d/ 00-zabezpeceni. conf sshd -T. - Test het inloggen met de sleutel altijd in een nieuw venster voordat je het oorspronkelijke venster sluit.
- Met het wachtwoord uitgeschakeld werken ook de tabbladen Bestanden en Databases niet meer; de console blijft werken.