Hoe SSH-sleutels instellen op CentOS 7

Inleiding

SSH, of secure shell, is een versleuteld protocol dat wordt gebruikt om servers te beheren en ermee te communiceren. Wanneer u met een CentOS-server werkt, is de kans groot dat u het grootste deel van uw tijd doorbrengt in een terminalsessie die via SSH met uw server is verbonden.

In deze gids zullen we ons richten op het instellen van SSH-sleutels voor een vanilla CentOS 7-installatie. SSH-sleutels bieden een eenvoudige, veilige manier om in te loggen op uw server en worden aanbevolen voor alle gebruikers.

Stap 1 – Maak een RSA sleutelpaar

De eerste stap is het maken van een sleutelpaar op de client machine (meestal uw computer):

  • ssh-keygen

Normaal maakt ssh-keygen een 2048-bit RSA sleutelpaar, wat veilig genoeg is voor de meeste gevallen (u kunt optioneel de -b 4096 vlag ingeven om een grotere 4096-bit sleutel te maken).

Na het invoeren van het commando, zou u 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 uw home directory, of geef een ander 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, zult u niet meer in staat zijn om te authenticeren met de vorige sleutel. Wees zeer voorzichtig bij het selecteren van ja, omdat dit een destructief proces is dat niet ongedaan kan worden gemaakt.

U zou dan de volgende prompt moeten zien:

Output
Enter passphrase (empty for no passphrase):

Hier kunt u optioneel een veilige passphrase invoeren, hetgeen sterk wordt aanbevolen. Een passphrase voegt een extra beveiligingslaag toe om te voorkomen dat onbevoegde gebruikers kunnen inloggen. Om meer te leren over beveiliging, raadpleeg onze tutorial over Hoe SSH Sleutel-gebaseerde Authenticatie te Configureren op een Linux Server.

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 [email protected]_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

U heeft nu een publieke en private sleutel die u kunt gebruiken om te authenticeren. De volgende stap is het plaatsen van de publieke sleutel op uw server zodat u SSH-key-gebaseerde authenticatie kunt gebruiken om in te loggen.

Stap 2 – Kopieer de publieke sleutel naar de CentOS server

De snelste manier om uw publieke sleutel naar de CentOS host te kopiëren is door gebruik te maken van een utility genaamd ssh-copy-id. Vanwege zijn eenvoud wordt deze methode sterk aanbevolen indien beschikbaar. Als u ssh-copy-id niet beschikbaar heeft op uw client machine, kunt u een van de twee alternatieve methodes in deze sectie gebruiken (kopiëren via wachtwoord-gebaseerde SSH, of handmatig kopiëren van de sleutel).

Kopiëren van uw publieke sleutel met behulp van ssh-copy-id

Het ssh-copy-id hulpprogramma is standaard aanwezig in veel besturingssystemen, dus u heeft het wellicht beschikbaar op uw lokale systeem. Om deze methode te laten werken, moet u al wachtwoord-gebaseerde SSH toegang tot uw server hebben.

Om het hulpprogramma te gebruiken, hoeft u alleen de host op afstand op te geven waarmee u verbinding wilt maken en de gebruikersaccount waartoe u wachtwoord-SH toegang heeft. Dit is de account waarnaar uw publieke SSH sleutel zal worden gekopieerd.

De syntax is:

U kunt de volgende boodschap 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 alleen dat uw lokale computer de host op afstand niet herkent. Dit gebeurt de eerste keer dat u verbinding maakt met een nieuwe host. Typ “yes” en druk op ENTER om door te gaan.

Naar aanleiding van de melding zal het programma uw lokale account scannen op de id_rsa.pub sleutel die we eerder hebben aangemaakt. Als de sleutel is gevonden, wordt u gevraagd om het wachtwoord van de account van de gebruiker op afstand:

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 in (uw typen wordt om veiligheidsredenen niet weergegeven) en druk op ENTER. Het hulpprogramma maakt verbinding met de account op de host op afstand met het door u opgegeven wachtwoord. Vervolgens wordt de inhoud van uw ~/.ssh/id_rsa.pub-sleutel gekopieerd naar een bestand in de home ~/.ssh-directory van de externe account, genaamd authorized_keys.

U zou de volgende uitvoer moeten zien:

Output
Number 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 punt is uw id_rsa.pub-sleutel geüpload naar de externe account. U kunt doorgaan met Stap 3.

Kopiëren van de publieke sleutel met behulp van SSH

Als u geen ssh-copy-id beschikbaar heeft, maar u heeft wachtwoord-gebaseerde SSH toegang tot een account op uw server, dan kunt u uw sleutels uploaden met een conventionele SSH methode.

We kunnen dit doen door het cat commando te gebruiken om de inhoud van de publieke SSH sleutel op onze lokale computer te lezen en die via een SSH verbinding naar de remote server te pipen.

Aan de andere kant, kunnen we ervoor zorgen dat de ~/.ssh directory bestaat en de juiste rechten heeft onder de account die we gebruiken.

We kunnen dan de inhoud die we hebben gepijpt uitvoeren in een bestand genaamd authorized_keys in deze directory. We gebruiken het >> redirect symbool om de inhoud toe te voegen in plaats van te overschrijven. Hierdoor kunnen we sleutels toevoegen zonder eerder toegevoegde sleutels te vernietigen.

Het volledige commando ziet er als volgt uit:

  • cat ~/.ssh/id_rsa.pub | ssh [email protected]_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

U kunt de volgende boodschap 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 uw lokale computer de host op afstand niet herkent. Dit gebeurt de eerste keer dat u verbinding maakt met een nieuwe host. Typ “ja” en druk op ENTER om verder te gaan.

Na afloop wordt u gevraagd het wachtwoord van de gebruikersaccount op afstand in te voeren:

Output
[email protected]'s password:

Na het invoeren van uw wachtwoord wordt de inhoud van uw id_rsa.pub-sleutel gekopieerd naar het einde van het authorized_keys-bestand van de gebruikersaccount op afstand. Ga verder met Stap 3 als dit succesvol was.

Publieke sleutel handmatig kopiëren

Als u geen wachtwoord-gebaseerde SSH toegang tot uw server beschikbaar heeft, zult u het bovenstaande proces handmatig moeten voltooien.

We zullen de inhoud van uw id_rsa.pub bestand handmatig toevoegen aan het ~/.ssh/authorized_keys bestand op uw machine op afstand.

Om de inhoud van uw id_rsa.pub sleutel te tonen, typ dit in uw locale computer:

  • cat ~/.ssh/id_rsa.pub

U zult de inhoud van de sleutel zien, 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== [email protected]

Toegang tot uw host op afstand door gebruik te maken van de methode die u beschikbaar heeft.

Als u eenmaal toegang heeft tot uw account op de server op afstand, moet u ervoor zorgen dat de ~/.ssh directory bestaat. Dit commando zal de directory aanmaken indien nodig, of niets doen als hij al bestaat:

  • mkdir -p ~/.ssh

Nu kunt u het authorized_keys bestand in deze directory aanmaken of wijzigen. U kunt de inhoud van uw id_rsa.pub bestand toevoegen aan het einde van het authorized_keys bestand, en het indien nodig aanmaken, met dit commando:

  • echo public_key_string >> ~/.ssh/authorized_keys

In het bovenstaande commando, vervangt u de public_key_string door de uitvoer van het cat ~/.ssh/id_rsa.pub commando dat u op uw lokale systeem heeft uitgevoerd. Het moet beginnen met ssh-rsa AAAA....

Ten slotte zorgen we ervoor dat de ~/.ssh directory en authorized_keys bestand de juiste permissies hebben ingesteld:

  • chmod -R go= ~/.ssh

Dit verwijdert recursief alle “group” en “other” permissies voor de ~/.ssh/ directory.

Als u de root account gebruikt om sleutels voor een gebruikersaccount in te stellen, is het ook belangrijk dat de ~/.ssh directory aan de gebruiker toebehoort en niet aan root:

  • chown -R sammy:sammy ~/.ssh

In deze tutorial heet onze gebruiker sammy, maar u zou de juiste gebruikersnaam in het bovenstaande commando moeten zetten.

We kunnen nu wachtwoordloze authenticatie proberen met onze Ubuntu server.

Stap 3 – Authentificeer naar uw CentOS server met behulp van SSH sleutels

Als u met succes een van de bovenstaande procedures heeft doorlopen, zou u in staat moeten zijn om in te loggen op de remote host zonder het wachtwoord van het remote account.

Het basisproces is hetzelfde:

Als dit de eerste keer is dat u verbinding maakt met deze host (als u de laatste methode hierboven hebt gebruikt), ziet u misschien iets als dit:

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 uw lokale computer de host op afstand niet herkent. Typ “yes” en druk dan op ENTER om verder te gaan.

Als u geen passphrase voor uw private key heeft opgegeven, wordt u onmiddellijk ingelogd. Als u een passphrase voor de private key hebt opgegeven bij het aanmaken, wordt u nu gevraagd de passphrase in te voeren. Na de authenticatie zou een nieuwe shell sessie voor u moeten openen met het geconfigureerde account op de CentOS server.

Als de sleutel-gebaseerde authenticatie succesvol was, ga dan verder om te leren hoe u uw systeem verder kunt beveiligen door de wachtwoord authenticatie uit te schakelen.

Stap 4 – Wachtwoord authenticatie op uw server uitschakelen

Als u in staat was om in te loggen op uw account met SSH zonder wachtwoord, dan heeft u met succes de SSH-sleutel-gebaseerde authenticatie voor uw account geconfigureerd. Echter, uw wachtwoord-gebaseerde authenticatie mechanisme is nog steeds actief, wat betekent dat uw server nog steeds is blootgesteld aan brute-force aanvallen.

Voordat u de stappen in deze sectie voltooit, zorg ervoor dat u ofwel SSH-sleutel-gebaseerde authenticatie geconfigureerd heeft voor de root-account op deze server, of bij voorkeur, dat u SSH-sleutel-gebaseerde authenticatie geconfigureerd heeft voor een niet-root-account op deze server met sudo privileges. Deze stap zal wachtwoord-gebaseerde logins blokkeren, dus het is cruciaal om er zeker van te zijn dat je nog steeds administratieve toegang kunt krijgen.

Als je eenmaal hebt bevestigd dat je remote account administratieve privileges heeft, log dan in op je remote server met SSH keys, ofwel als root of met een account met sudo privileges. Open vervolgens het configuratiebestand van de SSH daemon:

  • sudo vi /etc/ssh/sshd_config

Zoek in het bestand naar een richtlijn genaamd PasswordAuthentication. Deze kan zijn uitgecommentarieerd. Druk op i om tekst in te voegen, en maak dan het commentaar van de regel ongedaan en zet de waarde op “no”. Dit schakelt de mogelijkheid uit om in te loggen via SSH met account wachtwoorden:

/etc/ssh/sshd_config
...PasswordAuthentication no...

Wanneer u klaar bent met het maken van veranderingen, druk dan op ESC en dan :wq om de veranderingen naar het bestand te schrijven en af te sluiten. Om deze veranderingen daadwerkelijk door te voeren, moeten we de sshd service opnieuw starten:

  • sudo systemctl restart sshd.service

Open als voorzorgsmaatregel een nieuw terminal venster en test of de SSH service correct functioneert voordat u deze sessie sluit:

Als u uw SSH service heeft geverifieerd, kunt u veilig alle huidige server sessies sluiten.

De SSH daemon op uw CentOS server reageert nu alleen op SSH keys. Wachtwoord-gebaseerde authenticatie is succesvol uitgeschakeld.

Conclusie

U zou nu SSH-key-gebaseerde authenticatie op uw server geconfigureerd moeten hebben, waardoor u zich kunt aanmelden zonder een account-wachtwoord op te geven.

Als u meer wilt leren over het werken met SSH, bekijk dan onze SSH Essentials Gids.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.