Introductie
SSH, of secure shell, is een versleuteld protocol dat wordt gebruikt om servers te beheren en te communiceren. Wanneer je werkt met een Rocky Linux-server, is de kans groot dat je het grootste deel van je tijd doorbrengt in een terminalsessie die is verbonden met je server via SSH.
In deze handleiding zullen we ons richten op het instellen van SSH-sleutels voor een Rocky Linux 9-server. SSH-sleutels bieden een eenvoudige, veilige methode om in te loggen op je server en worden aanbevolen voor alle gebruikers.
Stap 1 — Het RSA-sleutelpaar maken
De eerste stap is om een sleutelpaar te maken op de clientmachine (meestal je lokale computer):
- ssh-keygen
Standaard zal ssh-keygen
een 2048-bits RSA-sleutelpaar maken, wat voldoende veilig is voor de meeste gevallen (je kunt optioneel de -b 4096
vlag doorgeven om een grotere 4096-bits sleutel te maken).
Na het invoeren van het commando zou je de volgende prompt moeten zien:
OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Druk op ENTER
om het sleutelpaar op te slaan in de .ssh/
subdirectory in je thuismap, of specificeer een alternatief pad.
Als je eerder een SSH-sleutelpaar hebt gegenereerd, zie je mogelijk de volgende prompt:
Output/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Als u ervoor kiest om de sleutel op de schijf te overschrijven, zult u niet langer in staat zijn om te authenticeren met behulp van de vorige sleutel. Wees zeer voorzichtig bij het selecteren van ja, want dit is een destructief proces dat niet kan worden teruggedraaid.
U zou dan de volgende prompt moeten zien:
OutputEnter passphrase (empty for no passphrase):
Hier kunt u optioneel een veilige wachtzin invoeren, wat sterk wordt aanbevolen. Een wachtzin voegt een extra beveiligingslaag toe aan uw sleutel om te voorkomen dat ongeautoriseerde gebruikers kunnen inloggen.
U zou dan de volgende uitvoer moeten zien:
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_host
The key's randomart image is:
+--[ RSA 2048]----+
| ..o |
| E o= . |
| o. o |
| .. |
| ..S |
| o o. |
| =o.+. |
|. =++.. |
|o=++. |
+-----------------+
U heeft nu een openbare en privésleutel die u kunt gebruiken voor authenticatie. De volgende stap is om de openbare sleutel op uw server te krijgen, zodat u SSH-sleutelgebaseerde authenticatie kunt gebruiken om in te loggen.
Stap 2 – Het kopiëren van de openbare sleutel naar uw Rocky Linux-server
De snelste manier om uw openbare sleutel naar de Rocky Linux-host te kopiëren, is door gebruik te maken van een hulpprogramma genaamd ssh-copy-id
. Deze methode wordt sterk aanbevolen als deze beschikbaar is. Als u geen ssh-copy-id
beschikbaar heeft op uw clientmachine, kunt u een van de twee alternatieve methoden gebruiken die volgen (kopiëren via SSH met wachtwoord of handmatig kopiëren van de sleutel).
Het kopiëren van je openbare sleutel met behulp van ssh-copy-id
De ssh-copy-id
tool is standaard opgenomen in veel besturingssystemen, dus het is mogelijk beschikbaar op je lokale systeem. Voor deze methode om te werken, moet je al SSH-toegang hebben op basis van wachtwoord naar je server.
Om de utility te gebruiken, hoef je alleen het externe host op te geven waarmee je wilt verbinden en het gebruikersaccount waartoe je toegang hebt via SSH op basis van wachtwoord. Dit is het account waarnaar je openbare SSH-sleutel zal worden gekopieerd:
- ssh-copy-id username@remote_host
Je zou het volgende bericht kunnen 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 je lokale computer de externe host niet herkent. Dit zal gebeuren de eerste keer dat je verbinding maakt met een nieuwe host. Typ ja
en druk op ENTER
om door te gaan.
Vervolgens zal de utility je lokale account scannen op de id_rsa.pub
-sleutel die we eerder hebben aangemaakt. Wanneer het de sleutel vindt, zal het je om het wachtwoord van het gebruikersaccount op de externe host vragen:
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 keys
username@203.0.113.1's password:
Typ het wachtwoord in (je invoer wordt niet weergegeven om veiligheidsredenen) en druk op ENTER
. De utility zal verbinding maken met het account op de externe host met behulp van het wachtwoord dat je hebt opgegeven. Vervolgens zal het de inhoud van je ~/.ssh/id_rsa.pub
-sleutel kopiëren naar het ~/.ssh/authorized_keys
-bestand van het externe account.
Je zou de volgende uitvoer moeten zien:
OutputNumber of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.
Op dit moment is je `id_rsa.pub`-sleutel geüpload naar het externe account. Je kunt doorgaan naar Stap 3.
Openbare sleutel kopiëren met behulp van SSH
Als je niet beschikt over `ssh-copy-id`, maar wel over op wachtwoord gebaseerde SSH-toegang tot een account op je server, kun je je sleutels uploaden met een meer conventionele SSH-methode.
Dit kunnen we doen door het `cat`-commando te gebruiken om de inhoud van de openbare SSH-sleutel op onze lokale computer te lezen en die door te sturen via een SSH-verbinding naar de externe server.
Aan de andere kant kunnen we ervoor zorgen dat de `~/.ssh`-map bestaat en de juiste machtigingen heeft onder het account dat we gebruiken.
Vervolgens kunnen we de inhoud die we hebben doorgestuurd naar een bestand genaamd `authorized_keys` binnen deze map uitvoeren. We zullen het `>>` omleidsymbool gebruiken om de inhoud toe te voegen zonder deze te overschrijven. Hierdoor kunnen we sleutels toevoegen zonder eventuele eerder toegevoegde sleutels te vernietigen.
De volledige opdracht 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"
Je ziet mogelijk 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 je 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 door te gaan.
Nadien moet je worden gevraagd om het wachtwoord van het externe gebruikersaccount in te voeren:
Outputusername@203.0.113.1's password:
Na het invoeren van je wachtwoord, zal de inhoud van je id_rsa.pub
-sleutel worden gekopieerd naar het einde van het bestand authorized_keys
van het externe gebruikersaccount. Ga verder naar Stap 3 als dit succesvol was.
Handmatig Kopiëren van Openbare Sleutel
Als je geen SSH-toegang op basis van wachtwoord naar je server hebt, moet je het bovenstaande proces handmatig voltooien.
We zullen handmatig de inhoud van je id_rsa.pub
-bestand toevoegen aan het bestand ~/.ssh/authorized_keys
op je externe machine.
Om de inhoud van je id_rsa.pub
-sleutel weer te geven, typ je dit op je lokale computer:
- cat ~/.ssh/id_rsa.pub
Je ziet de inhoud van de sleutel, 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== sammy@host
Log in op je externe host met welke methode dan ook die beschikbaar is.
Zodra je toegang hebt tot je account op de externe server, moet je 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 kun je het bestand authorized_keys
maken of aanpassen binnen deze directory. Je kunt de inhoud van je id_rsa.pub
-bestand toevoegen aan het einde van het authorized_keys
-bestand, het aanmaken indien nodig, met behulp van deze opdracht:
- echo public_key_string >> ~/.ssh/authorized_keys
In de bovenstaande opdracht, vervang de public_key_string
door de output van de cat ~/.ssh/id_rsa.pub
-opdracht die je hebt uitgevoerd op je lokale systeem. Het moet beginnen met ssh-rsa AAAA...
.
Tenslotte zullen we ervoor zorgen dat de ~/.ssh
-directory en het authorized_keys
-bestand de juiste rechten hebben:
- chmod -R go= ~/.ssh
Dit verwijdert recursief alle “groeps” en “andere” rechten voor de ~/.ssh/
-directory.
Als je de root
-account gebruikt om sleutels in te stellen voor een gebruikersaccount, is het ook belangrijk dat de ~/.ssh
-directory toebehoort aan de gebruiker en niet aan root
:
- chown -R sammy:sammy ~/.ssh
In deze tutorial is onze gebruiker genaamd sammy, maar je moet de juiste gebruikersnaam invullen in de bovenstaande opdracht.
We kunnen nu proberen om in te loggen op onze Rocky Linux-server met sleutelgebaseerde authenticatie.
Stap 3 — Inloggen op je Rocky Linux-server met SSH-sleutels
Als een van de bovenstaande procedures succesvol is voltooid, moet je nu in staat zijn om in te loggen op de externe host zonder het wachtwoord van het externe account.
Het initiële proces is hetzelfde als bij op wachtwoord gebaseerde authenticatie:
- ssh username@remote_host
Als dit de eerste keer is dat je verbinding maakt met deze host (als je de laatste methode hebt gebruikt), zie je mogelijk zoiets:
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 je lokale computer de externe host niet herkent. Typ yes
en druk vervolgens op ENTER
om door te gaan.
Als je geen wachtwoord hebt opgegeven bij het maken van je sleutelpaar in stap 1, wordt je direct ingelogd. Als je wel een wachtwoord hebt opgegeven, wordt je nu gevraagd om het in te voeren. Na authenticatie zou er een nieuwe shellsessie voor je moeten openen met het geconfigureerde account op de Rocky Linux-server.
Als key-gebaseerde authenticatie succesvol was, ga dan verder om te leren hoe je je systeem verder kunt beveiligen door de op wachtwoord gebaseerde authenticatie van je SSH-server uit te schakelen.
Stap 4 — Schakel Wachtwoordauthenticatie uit op je Server
Als je in staat was om in te loggen op je account via SSH zonder een wachtwoord, heb je met succes SSH-sleutelgebaseerde authenticatie geconfigureerd voor je account. Echter, je op wachtwoord gebaseerde authenticatiemechanisme is nog steeds actief, wat betekent dat je server nog steeds blootgesteld is aan brute-force aanvallen.
Voordat je de stappen in dit gedeelte voltooit, zorg ervoor dat je SSH-sleutelgebaseerde authenticatie hebt geconfigureerd voor het root-account op deze server, of bij voorkeur, dat je SSH-sleutelgebaseerde authenticatie hebt geconfigureerd voor een niet-root account op deze server met sudo
-rechten. Deze stap vergrendelt inloggen op basis van wachtwoorden, dus het is essentieel om ervoor te zorgen dat je nog steeds administratieve toegang kunt krijgen.
Zodra je hebt bevestigd dat je externe account administratieve rechten heeft, log in op je externe server met SSH-sleutels, ofwel als root of met een account met sudo
-rechten. Open vervolgens het configuratiebestand van de SSH-daemon:
- sudo vi /etc/ssh/sshd_config
Binnen het bestand zoek je naar een richtlijn genaamd PasswordAuthentication
. Dit kan zijn uitgeschakeld met een #
-teken. Druk op i
om vi
in de invoegmodus te zetten, en uncomment vervolgens de regel en stel de waarde in op no
. Hiermee schakel je de mogelijkheid uit om in te loggen via SSH met accountwachtwoorden:
...
PasswordAuthentication no
...
Als je klaar bent met het aanbrengen van wijzigingen, druk op ESC
en dan :wq
om de wijzigingen op te slaan en af te sluiten. Om deze wijzigingen daadwerkelijk door te voeren, moeten we de sshd
-service herstarten:
- sudo systemctl restart sshd
Als voorzorgsmaatregel, open een nieuw terminalvenster en test of de SSH-service correct werkt voordat je je huidige sessie afsluit:
- ssh username@remote_host
Zodra je hebt geverifieerd dat je SSH-service nog steeds goed werkt, kun je veilig alle huidige server sessies sluiten.
De SSH-daemon op je Rocky Linux-server reageert nu alleen op SSH-sleutels. Authenticatie op basis van wachtwoorden is succesvol uitgeschakeld.
Conclusie
Je zou nu SSH-sleutelgebaseerde authenticatie geconfigureerd moeten hebben op je server, waardoor je kunt inloggen zonder een accountwachtwoord op te geven.
Als je meer wilt weten over werken met SSH, kijk dan naar onze SSH Essentials Gids.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9