Hoe SSH-sleutels instellen op Rocky Linux 9

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):

  1. 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:

Output
Generating 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:

Output
Enter 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:

Output
Your 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:

  1. ssh-copy-id username@remote_host

Je zou het volgende bericht kunnen zien:

Output
The 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:

Output
Number 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:

  1. 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:

Output
The 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:

Output
username@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:

  1. cat ~/.ssh/id_rsa.pub

Je ziet de inhoud van de sleutel, die er ongeveer zo uit zou moeten zien:

Output
ssh-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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

Output
The 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:

  1. 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:

/etc/ssh/sshd_config
...
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:

  1. sudo systemctl restart sshd

Als voorzorgsmaatregel, open een nieuw terminalvenster en test of de SSH-service correct werkt voordat je je huidige sessie afsluit:

  1. 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