SSH-sleutels instellen op Ubuntu 16.04
Inleiding
SSH, of secure shell, is een versleuteld protocol dat wordt gebruikt voor het beheren en communiceren met servers. Wanneer u met een Ubuntu-server werkt, is de kans groot dat u het grootste deel van uw tijd zult doorbrengen in een terminalsessie die via SSH met uw server is verbonden.
in deze gids zullen we ons richten op het instellen van SSH-toetsen voor een vanilla Ubuntu 16.04 installatie. SSH sleutels bieden een gemakkelijke, veilige manier van inloggen op uw server en worden aanbevolen voor alle gebruikers.
Stap 1-Maak het RSA sleutelpaar
de eerste stap is het maken van een sleutelpaar op de client machine (meestal uw computer):
- ssh-keygen
standaard ssh-keygen
zal een 2048-bit RSA sleutelpaar maken, dat veilig genoeg is voor de meeste use cases (u kunt optioneel doorgeven in de -b 4096
vlag om een grotere 4096-bit sleutel aan te maken).
na het invoeren van het commando, ziet u de volgende uitvoer:
druk op ENTER
om het sleutelpaar op te slaan in de .ssh/
submap in uw persoonlijke map, of geef een alternatief pad op.
Als u eerder een SSH-sleutelpaar had gegenereerd, kunt u de volgende prompt zien:
Output/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?
Als u ervoor kiest om de sleutel op schijf te overschrijven, kunt u niet meer authenticeren met de vorige sleutel. Wees heel voorzichtig bij het selecteren van ja, want dit is een destructief proces dat niet kan worden teruggedraaid.
u ziet dan de volgende prompt:
OutputEnter passphrase (empty for no passphrase):
Hier kunt u optioneel een beveiligde wachtwoordzin invoeren, wat ten zeerste wordt aanbevolen. Een wachtwoordzin voegt een extra beveiligingslaag toe om te voorkomen dat onbevoegde gebruikers inloggen. Voor meer informatie over beveiliging, raadpleeg onze tutorial over het configureren van SSH Key-based authenticatie op een Linux Server.
dan ziet u de volgende uitvoer:
OutputYour identification has been saved in /your_home/.ssh/id_rsa.Your public key has been saved in /your_home/.ssh/id_rsa.pub.The key fingerprint is:a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+
u hebt nu een publieke en private sleutel die u kunt gebruiken om te authenticeren. De volgende stap is om de publieke sleutel op uw server te plaatsen, zodat u SSH-key-gebaseerde authenticatie kunt gebruiken om in te loggen.
Stap 2-kopieer de publieke sleutel naar de Ubuntu-Server
de snelste manier om uw publieke sleutel naar de Ubuntu-host te kopiëren is door een hulpprogramma genaamd ssh-copy-id
te gebruiken. Vanwege de eenvoud wordt deze methode sterk aanbevolen indien beschikbaar. Als u ssh-copy-id
niet beschikbaar heeft op uw clientcomputer, kunt u een van de twee alternatieve methoden gebruiken die in deze sectie worden geboden (kopiëren via een wachtwoord gebaseerde SSH, of handmatig kopiëren van de sleutel).
publieke sleutel kopiëren met behulp van ssh-copy-id
het hulpprogramma ssh-copy-id
is standaard opgenomen in veel besturingssystemen, zodat u het mogelijk op uw lokale systeem beschikbaar heeft. Om deze methode te laten werken, moet je al een op een wachtwoord gebaseerde SSH-toegang tot je server hebben.
om het hulpprogramma te gebruiken, hoeft u alleen maar de externe host op te geven waarmee u verbinding wilt maken en het gebruikersaccount waartoe u SSH-wachtwoordtoegang hebt. Dit is het account waarnaar uw publieke SSH sleutel zal worden gekopieerd.
de syntaxis is:
- ssh-copy-id username@remote_host
u kunt het volgende bericht zien:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Dit betekent dat uw lokale computer de externe host niet herkent. Dit gebeurt de eerste keer dat je verbinding maakt met een nieuwe host. Typ “yes”en druk op ENTER
om verder te gaan.
vervolgens zal het hulpprogramma uw lokale account scannen op de id_rsa.pub
sleutel die we eerder hebben aangemaakt. Wanneer het de sleutel vindt, wordt u gevraagd om het wachtwoord van het account van de externe gebruiker:
Output/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new [email protected]'s password:
Typ het wachtwoord (uw typen zal niet worden weergegeven voor veiligheidsdoeleinden) en druk op ENTER
. Het hulpprogramma zal verbinding maken met het account op de externe host met behulp van het wachtwoord dat u hebt opgegeven. Het zal dan de inhoud van uw ~/.ssh/id_rsa.pub
sleutel kopiëren naar een bestand in de home van het externe account ~/.ssh
map genaamd authorized_keys
.
u ziet de volgende uitvoer:
OutputNumber of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.
Op dit moment is uw id_rsa.pub
sleutel geüpload naar het externe account. U kunt doorgaan naar stap 3.
publieke sleutel kopiëren met behulp van SSH
als ssh-copy-id
niet beschikbaar is, maar u hebt SSH-toegang met een wachtwoord tot een account op uw server, kunt u uw sleutels uploaden met een conventionele SSH-methode.
We kunnen dit doen door gebruik te maken van het cat
commando om de inhoud van de publieke SSH sleutel op onze lokale computer te lezen en dat door een SSH verbinding met de externe server te leiden.
aan de andere kant kunnen we ervoor zorgen dat de ~/.ssh
map bestaat en de juiste rechten heeft onder het account dat we gebruiken.
We kunnen dan de inhoud die we doorsluizen naar een bestand met de naam authorized_keys
binnen deze map uitvoeren. We zullen het >>
redirect symbool gebruiken om de inhoud toe te voegen in plaats van het te overschrijven. Hiermee kunnen we sleutels toevoegen zonder eerder toegevoegde sleutels te vernietigen.
het volledige commando ziet er als volgt uit:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
mogelijk ziet u het volgende bericht:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Dit betekent dat uw lokale computer de externe host niet herkent. Dit gebeurt de eerste keer dat je verbinding maakt met een nieuwe host. Typ “yes”en druk op ENTER
om verder te gaan.
daarna moet u worden gevraagd om het wachtwoord van het gebruikersaccount op afstand in te voeren:
Output [email protected]'s password:
na het invoeren van uw wachtwoord zal de inhoud van uw id_rsa.pub
sleutel worden gekopieerd naar het einde van het authorized_keys
bestand van het account van de externe gebruiker. Ga verder naar stap 3 als dit succesvol was.
openbare sleutel handmatig kopiëren
Als u geen op een wachtwoord gebaseerde SSH-toegang tot uw server beschikbaar hebt, moet u het bovenstaande proces handmatig voltooien.
We zullen handmatig de inhoud van uw id_rsa.pub
Bestand toevoegen aan het ~/.ssh/authorized_keys
bestand op uw computer op afstand.
om de inhoud van uw id_rsa.pub
sleutel weer te geven, typ dit op uw lokale computer:
- cat ~/.ssh/id_rsa.pub
u zult de inhoud van de sleutel zien, die er ongeveer zo uit zou moeten zien:
Outputssh-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
toegang tot uw externe host met behulp van de methode die u beschikbaar hebt.
zodra u toegang hebt tot uw account op de externe server, moet u ervoor zorgen dat de map ~/.ssh
bestaat. Dit commando zal de map aanmaken indien nodig, of niets doen als deze al bestaat:
- mkdir -p ~/.ssh
nu kunt u het authorized_keys
bestand in deze map aanmaken of wijzigen. U kunt de inhoud van uw id_rsa.pub
Bestand toevoegen aan het einde van het authorized_keys
bestand, het indien nodig aanmaken met behulp van dit commando:
- echo public_key_string >> ~/.ssh/authorized_keys
in het bovenstaande commando, vervang de public_key_string
met de uitvoer van de cat ~/.ssh/id_rsa.pub
commando dat je hebt uitgevoerd op je lokale systeem. Het moet beginnen met ssh-rsa AAAA...
.
ten slotte zullen we ervoor zorgen dat de~/.ssh
map en authorized_keys
bestand de juiste rechten hebben ingesteld:
- chmod -R go= ~/.ssh
Dit verwijdert recursief alle” group “en” other”permissies voor de ~/.ssh/
map.
Als u de root
account gebruikt om sleutels voor een gebruikersaccount in te stellen, is het ook belangrijk dat de ~/.ssh
map toebehoort aan de gebruiker en niet aan root
:
- chown -R sammy:sammy ~/.ssh
In deze map tutorial onze gebruiker heet Sammy maar je moet de juiste gebruikersnaam vervangen in het bovenstaande commando.
We kunnen nu proberen passwordless authenticatie met onze Ubuntu server.
Stap 3-authenticeer bij Ubuntu-Server met behulp van SSH-sleutels
Als u een van de bovenstaande procedures met succes hebt voltooid, moet u in staat zijn om in te loggen op de externe host zonder het wachtwoord van het externe account.
het basisproces is hetzelfde:
- ssh username@remote_host
als dit de eerste keer is dat u verbinding maakt met deze host (Als u de laatste methode hierboven gebruikt), kunt u zoiets als dit zien:
OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.Are you sure you want to continue connecting (yes/no)? yes
Dit betekent dat uw lokale computer de externe host niet herkent. Typ “yes”en druk vervolgens op ENTER
om verder te gaan.
Als u geen wachtwoordzin voor uw persoonlijke sleutel hebt opgegeven, wordt u onmiddellijk ingelogd. Als u een wachtwoordzin voor de private sleutel hebt opgegeven toen u de sleutel aanmaakte, wordt u gevraagd deze nu in te voeren (merk op dat uw toetsaanslagen niet zullen worden weergegeven in de terminal sessie voor beveiliging). Na verificatie moet een nieuwe shell-sessie voor u worden geopend met het geconfigureerde account op de Ubuntu-server.
als sleutelgebaseerde authenticatie succesvol was, ga dan verder om te leren hoe u uw systeem verder kunt beveiligen door wachtwoordverificatie uit te schakelen.
Stap 4-wachtwoordverificatie uitschakelen op uw Server
Als u in staat was om in te loggen op uw account met behulp van SSH zonder wachtwoord, hebt u met succes SSH-key-gebaseerde authenticatie ingesteld op uw account. Echter, uw wachtwoord gebaseerde authenticatie mechanisme is nog steeds actief, wat betekent dat uw server is nog steeds blootgesteld aan brute-force aanvallen.
voordat u de stappen in deze sectie uitvoert, moet u ervoor zorgen dat SSH-key-gebaseerde authenticatie is geconfigureerd voor het root-account op deze server, of bij voorkeur dat u SSH-key-gebaseerde authenticatie hebt geconfigureerd voor een niet-root-account op deze server met sudo
privileges. Deze stap zal vergrendelen wachtwoord-gebaseerde logins, dus ervoor te zorgen dat u nog steeds in staat om administratieve toegang zal zijn van cruciaal belang.
zodra u hebt bevestigd dat uw externe account beheerdersrechten heeft, log dan in op uw externe server met SSH-sleutels, hetzij als root, hetzij met een account met sudo
bevoegdheden. Open vervolgens het configuratiebestand van de SSH-daemon:
- sudo nano /etc/ssh/sshd_config
in het bestand, zoek naar een directive genaamd PasswordAuthentication
. Dit kan worden uitgesloten. Verwijder het commentaar van de regel en stel de waarde in op “Nee”. Dit zal uw mogelijkheid om in te loggen via SSH met behulp van account wachtwoorden uitschakelen:
...PasswordAuthentication no...
sla het bestand op en sluit het als u klaar bent door op CTRL
X
te drukken, dan Y
te drukken om te bevestigen het bestand opslaan, en tenslotte ENTER
om nano te verlaten. Om deze wijzigingen daadwerkelijk te implementeren, moeten we de sshd
service:
- sudo systemctl restart ssh
uit voorzorg een nieuw terminalvenster openen en testen of de SSH-service correct werkt voordat deze sessie wordt afgesloten:
- ssh username@remote_host
zodra u uw SSH-service hebt geverifieerd, kunt u alle huidige serversessies veilig sluiten.
de SSH-daemon op uw Ubuntu-server reageert nu alleen op SSH-sleutels. Authenticatie op basis van een wachtwoord is met succes uitgeschakeld.
conclusie
u zou nu SSH-key-based authenticatie moeten hebben geconfigureerd op uw server, zodat u zich kunt aanmelden zonder een accountwachtwoord op te geven.
als u meer wilt weten over het werken met SSH, bekijk dan onze SSH Essentials Guide.