SSH op een Linux-server
SSH, ook wel bekend als secure shell, is een protocol dat kan worden gebruikt om verbinding te maken en te communiceren met een server. Je kunt verbinding maken met je Linux-server voor een terminal-sessie met behulp van dit versleutelde protocol. Als je een OpenSSH-server gebruikt, zijn er in de eerste plaats twee verschillende manieren om het authenticatieproces te doorlopen. De eerste is je standaard op wachtwoord gebaseerde authenticatie. Hier gebruik je simpelweg je gebruikersnaam en wachtwoord om toegang te krijgen tot je account. De andere manier is om je Linux-server in te stellen voor op SSH-sleutels gebaseerde authenticatie.
In deze handleiding richten we ons op hoe je je Linux-server kunt configureren om SSH-sleutels te gebruiken als het primaire authenticatiemiddel. We zullen ook bespreken waarom SSH-sleutels vaak de voorkeur hebben boven het gebruikelijke wachtwoordbeveiligingsmechanisme.
Wat zijn SSH-sleutels?
SSH-sleutels zijn vergelijkbaar met de inloggegevens die je gebruikt om in te loggen op je account op de server. In plaats van je gebruikersnaam en wachtwoord in te voeren, gebruik je het SSH-sleutelpaar, dat ook een toegangsgegeven is. Hoewel de sleutels cryptografisch zijn, moet je ze behandelen als authenticatiegegevens, aangezien dat het doel is dat ze dienen.
Een typische SSH-sleutel bestaat uit twee delen: een geautoriseerde sleutel en een identiteitssleutel. De geautoriseerde sleutel is de openbare sleutel die in combinatie met je privé-identiteitssleutel werkt om je toegang tot je account te geven. De openbare sleutel bevindt zich op de externe server waarop je wilt inloggen met SSH en blijft in het bestand ~/.ssh/authorized_keys dat is gekoppeld aan je gebruikersaccount. Identiteitssleutels dienen om je identiteit als de juiste gebruiker te verifiëren om ervoor te zorgen dat alleen geautoriseerd personeel toegang heeft tot het betreffende account. Gezamenlijk worden deze sleutels de gebruikerssleutels genoemd, omdat ze de identiteit van de gebruiker authenticeren. Zodra de server beide sleutels kan verifiëren, wordt er een shell-sessie gestart om je commando's uit te voeren.
Je hebt ook hostsleutels en sessiesleutels. Het protocol authenticeert de lokale computer, het systeem of de server met behulp van de hostsleutel. Sessiesleutels helpen om de datastroom over de verbinding te versleutelen. Dit maakt je sessie en de bijbehorende activiteit veel veiliger en betrouwbaarder.
SSH-sleutels versus wachtwoordbeveiliging
De belangrijkste reden waarom op SSH-sleutels gebaseerde authenticatie de voorkeur verdient boven wachtwoordbeveiliging, is dat die laatste je kwetsbaar kan maken voor cyberaanvallen. De meeste mensen gebruiken geen extreem complexe wachtwoorden, zodat ze ze kunnen onthouden wanneer ze moeten inloggen. Dit creëert een kwetsbaarheid. Veel aanvallers gebruiken brute kracht om het relatief eenvoudige wachtwoord te kraken en in te breken op het account. Dit is tegenwoordig bijzonder eenvoudig geworden door automatisering en geavanceerde hackingtechnologieën.
SSH-sleutels bieden daarentegen een veel veiligere manier om toegang te krijgen tot je account. Zoals we al eerder zeiden, gebruikt deze methode een openbare sleutel en een privésleutel om de identiteit van een client te authenticeren. Hoewel je de openbare sleutel met iedereen kunt delen, moet je de privésleutel geheim houden. Wanneer ze aan elkaar gekoppeld zijn, ontsleutelt de openbare sleutel de privésleutel om je identiteit te authenticeren. Bovendien kun je de beveiliging uitbreiden door een wachtwoordzin aan het sleutelpaar toe te voegen. Verderop in de handleiding zullen we meer over de wachtwoordzin vertellen. Maar zelfs zonder de wachtwoordzin wordt je privé-SSH-sleutel extreem veilig bewaard op je lokale computer. Het netwerk heeft nooit rechtstreeks toegang tot de sleutel, die zich in een map met beperkte toegang bevindt en is voorzien van beperkte machtigingen.
SSH-sleutels genereren
Om je SSH-sleutelpaar te genereren, moet je door de OpenSSH-toolset bladeren en ssh-keygen zoeken. Dit is een speciaal hulpprogramma waarmee je een SSH-sleutelpaar kunt genereren van ongeveer 2048 bits groot. Begin met het uitvoeren van dit commando:
|
1 |
ssh-keygen |
Dit zal het volgende bericht weergeven:
|
1 2 |
Genereren openbaar/privé rsa sleutel paar. Voer bestand in waarin om op te slaan de sleutel (/home/gebruikersnaam/.ssh/id_rsa): |
Het bericht zal een privésleutel genaamd id_rsa en een openbare sleutel genaamd id_rsa.pub genereren. Op dit punt kun je kiezen waar je de sleutel wilt opslaan. We raden aan om de standaardlocatie te behouden door op Enter te drukken. Het aanhouden van de standaardlocatie zorgt ervoor dat de server de sleutels automatisch zal vinden en verifiëren wanneer je inlogt met dat systeem. De standaardlocatie is de ~/.ssh-map in de thuismap. Als je liever een andere locatie kiest, typ dan de locatie in.
Oudere SSH-sleutels overschrijven
Het is belangrijk om te weten dat je slechts één SSH-sleutelpaar tegelijk op je systeem kunt hebben. Dit betekent dat als je eerder een sleutelpaar hebt gegenereerd en opgeslagen op het systeem, je het volgende bericht zult zien:
|
1 2 |
/home/gebruikersnaam/.ssh/id_rsa bestaat al bestaat. Overschrijven (j/n)? |
Om door te gaan met het maken en opslaan van je nieuwe SSH-sleutelpaar, moet je het bestaande paar verwijderen. Onthoud: als je de sleutel die al op de schijf is opgeslagen overschrijft, kun je deze niet meer gebruiken voor authenticatiedoeleinden. Dit is een onomkeerbaar proces, dus zorg ervoor dat je er absoluut zeker van bent dat je het oude sleutelpaar wilt overschrijven.
Een wachtwoordzin instellen
Zodra je de sleutels in de map hebt ingesteld, wordt je gevraagd of je een wachtwoordzin wilt opgeven:
|
1 2 3 |
Aangemaakt map '/home/username/.ssh'. Voer wachtwoordzin (leeg voor geen wachtwoordzin): Voer dezelfde wachtwoordzin nogmaals: |
De wachtwoordzin is optioneel - je kunt ervoor kiezen om deze over te slaan. Het voegt echter een extra beveiligingslaag toe voor je privésleutel door deze op de schijf te versleutelen. Als je ervoor kiest om een wachtwoordzin te gebruiken, moet je deze elke keer dat je probeert in te loggen met dit SSH-sleutelpaar correct invoeren:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Je identificatie is been opgeslagen in /home/username/.ssh/id_rsa. Je openbare sleutel is been opgeslagen in /home/username/.ssh/id_rsa.pub. De sleutel vingerafdruk is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host De sleutel's randomart afbeelding is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+ |
Ten slotte zou je nu je SSH-sleutels moeten hebben die je kunt gebruiken om de client te authenticeren.
Je SSH-sleutel integreren in je serveraccount
Voordat je de sleutels gebruikt voor authenticatie, moet je de openbare sleutel toevoegen aan de externe Linux-server. Vervolgens laten we je zien hoe je dat doet bij het aanmaken van je CloudSigma-server. Eerst moet je je openbare SSH-sleutel vinden, zodat je deze kunt kopiëren en plakken. Als je de bovenstaande methode hebt gebruikt om je SSH-sleutelpaar te genereren, kun je de openbare sleutel vinden door het volgende te typen:
|
1 |
cat ~/.ssh/id_rsa.pub |
Dit zal ertoe leiden dat de openbare SSH-sleutel als volgt verschijnt:
|
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNqqi1mHLnryb1FdbePrSZQdmXRZxGZbo0gTfglysq6KMNUNY2VhzmYN9JYW39yNtjhVxqfW6ewc+eHiL+IRRM1P5ecDAaL3V0ou6ecSurU+t9DR4114mzNJ5SqNxMgiJzbXdhR+j55GjfXdk0FyzxM3a5qpVcGZEXiAzGzhHytUV51+YGnuLGaZ37nebh3UlYC+KJev4MYIVww0tWmY+9GniRSQlgLLUQZ+FcBUjaqhwqVqsHe4F/woW1IHe7mfm63GXyBavVc+llrEzRbMO111MogZUcoWDI9w7UIm8ZOTnhJsk7jhJzG2GpSXZHmly/a/buFaaFnmfZ4MYPkgJD username@example.com |
Kopieer deze waarde om later te gebruiken. Bij het aanmaken van een server met CloudSigma heb je de optie om een SSH-sleutel toe te voegen nadat je de servergrootte en het OS-image hebt geselecteerd:

Klik op Toevoegen en plak wat je hebt gekopieerd om de SSH-sleutel in je server te integreren. Hierdoor zal je server elke keer dat je deze opstart al voorzien zijn van de geïnjecteerde SSH-sleutel.
Een openbare sleutel naar een bestaande server kopiëren
Hoewel de bovenstaande methode werkt wanneer je een nieuwe server aanmaakt, is het ook mogelijk om een SSH-sleutel in een bestaande server te integreren? Het antwoord is ja, en er zijn meerdere manieren om dit te doen, afhankelijk van de hulpprogramma's die je tot je beschikking hebt.
SSH-Copy-ID gebruiken
Dit is de eenvoudigste en makkelijkste manier om een openbare sleutel te kopiëren. Het enige wat je nodig hebt is het hulpprogramma ssh-copy-id dat je vindt in de standaard OpenSSH-suite. Maar voordat je deze methode gebruikt, moet je ervoor zorgen dat op wachtwoord gebaseerde authenticatie is geactiveerd op je server. Om de sleutel te kopiëren, pas je de ssh-copy-id-syntaxis toe en voer je vervolgens de externe host in waarmee je verbinding wilt maken. Je moet ook het account opgeven waarmee je verbinding maakt. Je moet op wachtwoord gebaseerde toegang tot het account hebben, zodat je sleutel op de juiste locatie wordt gekopieerd. Het commando zou er als volgt uit moeten zien:
|
1 |
ssh-copy-id gebruikersnaam@externe_host |
Dit kan ertoe leiden dat er een bericht zoals het volgende op je scherm verschijnt:
|
1 2 3 |
De authenticiteit van host '111.111.11.111 (111.111.11.111)' kan 'niet worden vastgesteld. ECDSA sleutel vingerafdruk is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Weet je zeker dat je wilt doorgaan met verbinden (ja/nee)? ja |
Dit gebeurt meestal als het de eerste keer is dat je verbinding maakt met die specifieke externe host. Het betekent simpelweg dat de computer de host niet heeft herkend. Het enige wat je hoeft te doen is 'yes' te typen en op Enter te drukken. Zodra je dat doet, scant de tool het account om je openbare sleutel te vinden. Zodra deze is gevonden, wordt je gevraagd om je accountwachtwoord in te voeren:
|
1 2 3 |
/usr/bin/ssh-copy-id: INFO: poging om in te loggen met de nieuwe sleutel(s), om te filterenuit eventuele die al geïnstalleerd zijn /usr/bin/ssh-copy-id: INFO: 1 sleutel(s) moeten nog to worden geïnstalleerd -- als je nu een prompt krijgt now is het om te installeren de nieuwe sleutels gebruikersnaam@111.111.11.111's wachtwoord: |
Vervolgens kun je je wachtwoord invoeren. Wanneer je verbonden bent met je account, kopieert de tool de inhoud van de ~/.ssh/id_rsa.pub-sleutel en plakt deze onder authorized_keys in de ~/.ssh-map op je externe account. Je ziet dan het volgende bericht:
|
1 2 3 |
Aantal van sleutel(s) toegevoegd: 1 Nu probeer in te loggen op de machine, met: "ssh 'username@111.111.11.111'" en controleer om er zeker van te zijn dat alleen de sleutel(s) die je wilde werden toegevoegd. |
Dit betekent dat je je openbare sleutel met succes hebt gekopieerd naar je bestaande externe server.
SSH gebruiken
Dit is een vrij conventionele methode om je openbare sleutel naar een server te kopiëren. Het heeft de voorkeur om deze te gebruiken als je geen toegang hebt tot de ssh-copy-id-tool. Ook hier moet je op wachtwoord gebaseerde toegang tot je account hebben. Wat je in feite doet, is de inhoud van de openbare sleutel als uitvoer op je computer plaatsen en deze naar de externe server overbrengen via de SSH-verbinding die daartussen tot stand is gebracht. Het commando dat je hiervoor gebruikt, moet als volgt zijn:
|
1 |
cat ~/.ssh/id_rsa.pub | ssh gebruikersnaam@externe_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" |
Zoals u kunt zien, hebben we aangegeven dat de sleutel moet worden geplaatst in het bestand authorized_keys in de map ~/.ssh op de server. Het gebruik van het symbool >> zorgt er ook voor dat we sleutels toevoegen in plaats van ze te overschrijven. Na het uitvoeren van de opdracht ziet u mogelijk dit bericht:
|
1 2 3 |
De authenticiteit van host '111.111.11.111 (111.111.11.111)' kan'niet worden vastgesteld. ECDSA sleutel vingerafdruk is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Weet u zeker dat u wilt doorgaan met verbinden (ja/nee)? ja |
Net als bij het vorige bericht betekent dit dat de computer de externe host niet heeft herkend. Typ 'yes' en druk op Enter om door te gaan. Nu voert u het wachtwoord van het account in:
|
1 |
username@111.111.11.111's wachtwoord: |
Zodra het wachtwoord is geverifieerd, wordt de sleutel gekopieerd naar een bestand in uw gebruikersaccount zoals gespecificeerd.
Handmatig
Als u geen toegang op basis van een wachtwoord hebt tot uw account op de externe server, kunt u de openbare sleutel handmatig kopiëren. Het doel is om de waarde in het bestand id_rsa.pub over te zetten naar het bestand ~/.ssh/authorized_keys op uw externe apparaat. Zoals we al weten, kunnen we de waarde van de id_rsa.pub-sleutel bekijken met deze opdracht:
|
1 |
cat ~/.ssh/id_rsa.pub |
De inhoud van uw openbare SSH-sleutel ziet er als volgt uit:
|
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test |
Vervolgens moet u toegang krijgen tot uw account op de externe host via alle beschikbare middelen. Controleer na het inloggen of de map ~/.ssh aanwezig is. Als dit niet het geval is, kunt u de volgende opdracht uitvoeren om deze aan te maken:
|
1 |
mkdir -p ~/.ssh |
Nu kunt u deze opdracht gebruiken om de inhoud van het bestand id_rsa.pub toe te voegen aan het bestand authorized_keys in deze ~/.ssh-map op de externe server:
|
1 |
echo public_key_string >> ~/.ssh/authorized_keys |
In plaats van 'public_key_string' in te typen in deze opdracht, moet u de inhoud invoeren van de sleutel die u eerder hebt verkregen door de opdracht cat ~/.ssh/id_rsa.pub uit te voeren.
Authenticatie met uw SSH-sleutel
Nu kunt u eenvoudig toegang krijgen tot uw account met alleen uw SSH-sleutels. Dit betekent dat u uw wachtwoord niet meer nodig hebt om toegang te krijgen tot uw serveraccount. U gebruikt de inloggegevens die u normaal gesproken gebruikt om in te loggen:
|
1 |
ssh username@remote_host |
Dit kan ertoe leiden dat het volgende bericht verschijnt:
|
1 2 3 |
De authenticiteit van host '111.111.11.111 (111.111.11.111)' kan'niet worden vastgesteld. ECDSA sleutel vingerafdruk is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Weet u zeker dat u wilt doorgaan met verbinden (ja/nee)? ja |
Maak u geen zorgen als u dit bericht ziet. Het betekent simpelweg dat het lokale systeem de externe host niet kan herkennen. Dit gebeurt meestal als u voor de allereerste keer verbinding maakt met de host. Het enige wat u hoeft te doen is ‘yes’ typen en op Enter drukken. Terugkerend naar enkele van de vorige stappen: als u een wachtwoordzin hebt toegepast, is dit de plek waar u deze moet invoeren. Als u dat niet hebt gedaan, logt u direct in op uw account nadat de SSH-sleutels zijn geverifieerd. Dit zal leiden tot het openen van een nieuwe shell-sessie via uw huidige account op de lokale computer.
Hoe schakelt u wachtwoordauthenticatie uit op uw server?
Nu u weet hoe u uw SSH-sleutels moet instellen, moet u wachtwoordauthenticatie uitschakelen. Zelfs als u de SSH-sleutels kunt gebruiken voor authenticatie, bent u nog steeds kwetsbaar voor brute force-aanvallen als uw wachtwoordauthenticatieproces actief is. Voordat u het mechanisme voor wachtwoordauthenticatie uitschakelt, moet u ervoor zorgen dat de configuratie van op SSH-sleutels gebaseerde authenticatie van het root-account op de server is of dat het geconfigureerde account sudo-toegang heeft. De reden om dit te bevestigen is om ervoor te zorgen dat u administratieve toegang tot het account behoudt, zelfs wanneer wachtwoorden zijn uitgeschakeld. Nu kunt u deze SSH-sleutel gebruiken om in te loggen op uw serveraccount. De volgende stap is het openen van het configuratiebestand van de SSH-daemon:
|
1 |
sudo nano /etc/ssh/sshd_config |
Hier moet u zoeken naar de volgende richtlijn:
|
1 |
PasswordAuthentication |
U moet deze regel uitcommentariëren en de waarde veranderen in ‘no’, als volgt:
|
1 |
PasswordAuthentication no |
Als u dit doet, wordt op wachtwoord gebaseerde authenticatie uitgeschakeld. Sla het bestand op en sluit het wanneer u klaar bent. Ten slotte moet u uw apparaat opnieuw opstarten om de wijzigingen toe te passen. Als u de gebruiker bent van een Ubuntu- of Debian-apparaat, kunt u ook de volgende opdracht gebruiken om op wachtwoord gebaseerde toegang uit te schakelen:
|
1 |
sudo service ssh restart |
Om ervoor te zorgen dat uw daemon, of sshd, alleen op SSH gebaseerde authenticatie toestaat op de server op CentOS- of Fedora-machines, gebruikt u de opdracht:
|
1 |
sudo service sshd restart |
Conclusie
Zodra u al deze stappen hebt voltooid, zou op SSH-sleutels gebaseerde authenticatie geconfigureerd en actief moeten zijn op uw server. Nu kunt u er zeker van zijn dat uw servers veilig en beschermd zijn!
Veel computerplezier!
Reacties
Nog geen reacties. Wees de eerste.