SSH beveiligen met een private key (SSH key authenticatie)
Met SSH (Secure Shell) kun je veilig op afstand verbinding maken met een Linux- of Unix-server. Een standaard SSH-login met alleen een wachtwoord is echter gevoeliger voor aanvallen zoals brute-force pogingen. Door SSH te beveiligen met een private key en de juiste configuratie-instellingen toe te passen, verhoog je de veiligheid van je server aanzienlijk.
In deze handleiding lees je hoe je SSH key authenticatie instelt, wachtwoordtoegang uitschakelt en je SSH-server beter beveiligt.
SSH public en private key genereren
Voor veilige SSH-authenticatie maak je gebruik van een combinatie van een private key en een public key.
Op dit moment is Ed25519 een van de aanbevolen algoritmes vanwege de sterke beveiliging en efficiënte werking.
Maak een nieuwe SSH-key aan met:
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "naam@domeinnaam.nl"
Tijdens het aanmaken wordt gevraagd om een wachtwoordzin (passphrase). Het is verstandig om deze in te stellen voor extra beveiliging.
Na het uitvoeren van het commando worden twee bestanden aangemaakt:
~/.ssh/id_ed25519 → private key (geheim houden)
~/.ssh/id_ed25519.pub → public key (mag gedeeld worden)
De private key mag nooit naar anderen worden gestuurd. Alleen de public key wordt op de server geplaatst.
SSH key kopiëren naar een server
Kopieer de public key naar de gewenste server met:
ssh-copy-id username@servername
Hierna kun je inloggen zonder wachtwoord:
ssh username@servername
De server gebruikt jouw private key om je identiteit te controleren.
SSH-server configureren voor betere beveiliging
Open het SSH-configuratiebestand:
vi /etc/ssh/sshd_config
Pas de instellingen aan of voeg onderstaande configuratie toe:
# SSH poort
Port 22
# SSH logging
SyslogFacility AUTHPRIV
LogLevel VERBOSE
# Authenticatie
PubkeyAuthentication yes
# Verbied wachtwoord login
PasswordAuthentication no
PermitEmptyPasswords no
# Root login beperken
PermitRootLogin forced-commands-only
# Maximum aantal loginpogingen
MaxAuthTries 6
# Negeer oude rhosts authenticatie
IgnoreRhosts yes
# Verbinding actief houden
ClientAliveInterval 300
ClientAliveCountMax 0
# Login beperken tot specifieke gebruikers
AllowUsers user1
DenyUsers user2
# Login banner
Banner /etc/banner
Met deze instellingen wordt SSH-toegang uitsluitend toegestaan via SSH keys en worden ongewenste loginpogingen beperkt.
SSH-service opnieuw starten
Na het aanpassen van de configuratie moet de SSH-service opnieuw worden gestart:
service sshd restart
Controleer daarna of je nog kunt verbinden voordat je de huidige SSH-sessie sluit. Zo voorkom je dat je jezelf buitensluit.
SSH beveiliging controleren
Je kunt online controleren of jouw SSH-configuratie voldoet aan actuele beveiligingsrichtlijnen met bijvoorbeeld:
- SSH security checker:
https://sshcheck.com - SSH audit tool:
https://sshaudit.com
Deze tools controleren onder andere gebruikte algoritmes, encryptie-instellingen en kwetsbare configuraties.
Conclusie
Door SSH te beveiligen met een private key, wachtwoordlogin uit te schakelen en de SSH-configuratie te hardenen, verklein je de kans op ongeautoriseerde toegang tot je Linux-server aanzienlijk.