ssh-keygen: SSH-sleutels maken, de publieke sleutel registreren en ssh-copy-id gebruiken

TestomgevingRHEL-familieAlmaLinux 9.8root-accountGecontroleerd op 2026-11-05
Netwerkcommando'sssh-keygenssh-copy-idLocatie/usr/bin/ssh-keygen

ssh-keygen is de OpenSSH-opdracht die het paar van privésleutel en publieke sleutel voor SSH-verbindingen maakt, en die ook vingerafdrukken controleert, wachtwoordzinnen wijzigt en known_hosts opschoont. Ik maakte op een AlmaLinux 9-server een ed25519- en een rsa-sleutel, controleerde de vingerafdrukken, wijzigde wachtwoordzin en commentaar en testte daarna ssh-copy-id als dry-run: het enige dat naar de server gaat, is de ene regel met de publieke sleutel uit het .pub-bestand.

De accountnamen en paden van de sleutelbestanden in de uitvoer hieronder zijn voorbeeldwaarden, en de vingerafdrukken, publieke sleutels en randomart komen van sleutels die voor dit artikel zijn gemaakt en daarna verwijderd. De opdracht die een publieke sleutel echt op een server registreert, staat er wel, maar is niet uitgevoerd.

1️⃣ Sleutel maken met ssh-keygen: -t ed25519 en commentaar met -C

Een sleutel maak je in de vorm ssh-keygen -t type -C commentaar. -t is het sleuteltype en -C een commentaar aan het eind van de publieke sleutel, waarin je een e-mailadres of het doel zet. Hieronder staat de volledige uitvoer met het bestand vastgelegd via -f en twee keer Enter bij de vragen naar de wachtwoordzin.

ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519
Generating public/private ed25519 key pair.
Enter passphrase for "/home/user/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Druk je bij de vraag naar de wachtwoordzin alleen op Enter, dan krijg je een sleutel zonder wachtwoordzin. Laat je -f weg, dan vraagt eerst een regel waar het bestand moet worden opgeslagen. Tussen haakjes staat het standaardpad .ssh/id_ed25519 in je thuismap, en ook hier slaat alleen Enter de sleutel daar op.

De randomart aan het eind van de uitvoer is de vingerafdruk als plaatje. Bij het maken van de sleutel en bij de nieuwe controle met -lv verscheen hetzelfde plaatje.

ls -l ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub
-rw------- 1 user user 411 Oct 29 08:22 /home/user/.ssh/id_ed25519
-rw-r--r-- 1 user user  98 Oct 29 08:22 /home/user/.ssh/id_ed25519.pub

De privésleutel kreeg rechten 600 en de publieke sleutel 644. De privésleutel houd je alleen op je eigen computer en stuur je nergens heen.

cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

De publieke sleutel is één regel met het sleuteltype, de sleutelwaarde en het commentaar, gescheiden door spaties. Precies die regel komt in authorized_keys op de server waarmee je verbinding maakt. De rol van elk bestand in de map staat samengevat in een boom.

~/.sshMap met sleutels en verbindingsgegevens · rechten 700
id_ed25519Privésleutel · bestand dat alleen op je eigen computer staat · rechten 600
id_ed25519.pubEén regel publieke sleutel · komt in authorized_keys op de doelserver · rechten 644
authorized_keysLijst met publieke sleutels die op deze server mogen inloggen (staat op de ontvangende server)
known_hostsHostsleutels van servers waarmee je verbonden was · ssh-keygen -R verwijdert ze regel voor regel
configAlias, poort en sleutelbestand per server (ssh_config)

2️⃣ Opties van ssh-keygen: -f, -N, -b, -q

Vragen beantwoorden is handig als je met de hand typt, maar in een script moeten de vragen helemaal weg. Leg je het bestand vast met -f en de wachtwoordzin met -N, dan wordt de sleutel meteen gemaakt zonder vragen.

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N "" -C "deploy@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/deploy_key
Your public key has been saved in /home/user/.ssh/deploy_key.pub
The key fingerprint is:
SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com
The key's randomart image is:
+--[ED25519 256]--+
|        +        |
|       o +       |
|        +    .   |
|       . +  o    |
|    . o S ++o    |
|   . + +   B+    |
|  .oo * + .=+    |
|  E+o* Boo=++.   |
|   .=.=oo=o++.   |
+----[SHA256]-----+

Met lege aanhalingstekens achter -N krijg je een sleutel zonder wachtwoordzin, en opslaglocatie en vingerafdruk verschenen in één keer, zonder enige vraag.

ssh-keygen -t ed25519 -f ~/.ssh/deploy_key -N ""
Generating public/private ed25519 key pair.
/home/user/.ssh/deploy_key already exists.
Overwrite (y/n)?

Voer je de opdracht opnieuw uit met dezelfde naam, dan vraagt hij na already exists of hij moet overschrijven. Met n bleef alles ongewijzigd en eindigde de opdracht met exitcode 1. Om een sleutel die in gebruik is niet per ongeluk te overschrijven, maak je nieuwe sleutels onder een andere naam.

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "user@example.com"
Generating public/private rsa key pair.
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:f+uwCSQjMka1BEHzXADwIWbrlbVRiP6Z4tjnwNwPVAA user@example.com
The key's randomart image is:
+---[RSA 4096]----+
|o=BE*=+.         |
|oo.Oo++          |
| .+o+. .         |
|....  .          |
| .+ o.= S        |
| .o+o= + .       |
|  ++.o  . o .    |
| . o..o  . = .   |
|    o. .  o.o    |
+----[SHA256]-----+

Bij rsa bepaalt -b de lengte. Volgens de handleiding is de standaard 3072 bits; hierboven werd de sleutel met 4096 bits gemaakt en stond RSA 4096 in de kop van de randomart. Volgens de handleiding heeft ed25519 een vaste lengte en wordt -b daar genegeerd.

ssh-keygen -f ~/.ssh/default_key -N "" -C "user@example.com"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/default_key
Your public key has been saved in /home/user/.ssh/default_key.pub
The key fingerprint is:
SHA256:mwy02fpKxjxEVvLC2EUJeaMIiNFOVS0GwWVjN9v0j4c user@example.com
The key's randomart image is:
+--[ED25519 256]--+
|o+ o+=O=*..      |
|o + .*+B== .     |
| o ..oB+o.. .    |
|  . .+.=     +   |
|      = S   E o  |
|     + + o   .   |
|      B +        |
|     o o         |
|      ...        |
+----[SHA256]-----+

Zonder -t werd een ed25519-sleutel gemaakt.

ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?
rc=0

Met -q wordt alles verborgen, ook de vingerafdruk en de randomart, en blijft alleen de exitcode over. Handig als een script sleutels voor meerdere servers maakt.

📌 Belangrijkste opties: resultaten uit dit artikel

OptieTaakResultaat in dit artikel
-t typeType sleutel dat wordt gemaaktDe eerste regel van de uitvoer toont het type, zoals ed25519 of rsa; zonder opgave ed25519
-C commentaarCommentaar aan het eind van de publieke sleuteluser@example.com aan het eind van de publieke sleutel, bekeken met cat
-f bestandPad van het sleutelbestandEen regel dat er is opgeslagen in /home/user/.ssh/deploy_key; opnieuw met dezelfde naam already exists en Overwrite (y/n)?
-N wachtwoordzinNieuwe wachtwoordzin (passphrase); lege aanhalingstekens betekenen geen wachtwoordzinOpslaglocatie en vingerafdruk in één keer, zonder vraag naar de wachtwoordzin
-b bitsSleutellengteMet 4096 bij rsa staat RSA 4096 in de kop van de randomart
-qVerbergt alle uitvoerAlleen de regel rc=0 van echo blijft over
-lToont de vingerafdruk van een sleutelbestandDezelfde SHA256-vingerafdruk uit publieke en privésleutel; bij authorized_keys één regel per sleutel
-E hashBepaalt het hashtype van de vingerafdrukMet -E md5 een vingerafdruk die begint met MD5:00:7b:02:5e
-vSamen met -l ook de randomartDezelfde randomart als bij het maken van de sleutel
-yHaalt de publieke sleutel uit de privésleutel en toont dieEén regel publieke sleutel, teken voor teken gelijk aan het .pub-bestand
-pWijzigt de wachtwoordzin van een privésleutelEen regel dat er met de nieuwe wachtwoordzin is opgeslagen; de privésleutel groeit van 411 naar 464 bytes
-P wachtwoordzinOude wachtwoordzin (de huidige)Met de juiste wachtwoordzin de publieke sleutel, met een verkeerde incorrect passphrase supplied to decrypt private key
-cWijzigt het commentaar; het nieuwe geef je met -COld comment: user@example.com en Comment 'user@laptop' applied
-F hostZoekt de regel van die host in known_hosts# Host 192.0.2.10 found: line 1 en die regel
-R hostVerwijdert de regel van die host uit known_hostsknown_hosts updated en het oorspronkelijke bestand known_hosts.old; een onbekende host geeft not found
-HHasht hostnamen en adressen in known_hostsRegels die met |1| beginnen, plus een WARNING dat het .old-bestand de ongehashte regels bevat

📎 Andere opties: volgens de officiële handleiding

OptieTaak
-a rondesAantal KDF-rondes (bcrypt_pbkdf) bij het opslaan van de privésleutel; meer rondes maken de controle van de wachtwoordzin trager en brute force lastiger; standaard 16
-AMaakt ontbrekende hostsleutels voor elk standaardtype (rsa, ecdsa, ed25519) op de standaardpaden
-BToont de bubblebabble-digest van een sleutelbestand
-eZet een OpenSSH-sleutel om naar de -m-indeling (standaard RFC4716) en toont die, voor andere SSH-programma's
-iZet een sleutel zonder wachtwoordzin in de -m-indeling (standaard RFC4716) om naar de OpenSSH-indeling en toont die
-m indelingBepaalt de sleutelindeling (RFC4716, PKCS8, PEM); met -p worden privésleutels tussen de OpenSSH- en PEM-indeling omgezet
-r hostToont uit de publieke sleutel het SSHFP-DNS-record voor die hostnaam
-s CA-sleutelOndertekent een publieke sleutel met een CA-sleutel en maakt een certificaat
-LToont de inhoud van een certificaat
-KDownloadt de resident-sleutels op een FIDO-authenticator naar de huidige map
-Y signOndertekent een bestand met een SSH-sleutel; de handtekening wordt opgeslagen met .sig achter de bestandsnaam, en de naamruimte geef je met -n

3️⃣ ssh-keygen -l voor de vingerafdruk en -y om de publieke sleutel op te halen

Met meerdere sleutelbestanden is aan de bestandsnaam alleen moeilijk te zien welke publieke sleutel bij welke privésleutel hoort. Omdat de vingerafdruk voor privé- en publieke sleutel gelijk is, bevestig je het paar door met -l de vingerafdrukken van beide bestanden te vergelijken.

ssh-keygen -l -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
ssh-keygen -l -f ~/.ssh/id_ed25519
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)

Het publieke en het privésleutelbestand gaven dezelfde SHA256-vingerafdruk. De 256 vooraan is de sleutellengte en de haakjes aan het eind geven het sleuteltype.

ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub
256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)

Met -E md5 schakel je over op de oudere MD5-vingerafdruk. Dat gebruik je om te vergelijken als een oude server of een beheerpaneel MD5-vingerafdrukken toont.

ssh-keygen -lv -f ~/.ssh/id_ed25519.pub
256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
|                 |
|     .           |
|    o o          |
|     = o   .     |
|    =   Soo .    |
|     = *+*.. .   |
|    o.B.o++ .    |
|    .=o*Eo.+     |
|    o+=@OO=      |
+----[SHA256]-----+

Met -v erbij verschijnt de randomart opnieuw. Het was hetzelfde plaatje als bij het maken van de sleutel.

ssh-keygen -l -f ~/.ssh/authorized_keys
256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)

Geef je een bestand met meerdere regels publieke sleutels, zoals authorized_keys, dan krijg je per sleutel één regel vingerafdruk. Zo controleer je welke sleutels op een server geregistreerd staan.

ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com

-y haalt de publieke sleutel opnieuw uit de privésleutel. Heb je het .pub-bestand verwijderd of alleen de privésleutel naar een andere computer gezet, dan sla je deze uitvoer gewoon op in een bestand. De uitvoer was teken voor teken gelijk aan het oorspronkelijke .pub-bestand.

4️⃣ ssh-keygen -p om de wachtwoordzin te wijzigen en -c om het commentaar te wijzigen

Met een wachtwoordzin op de privésleutel is het bestand zonder die wachtwoordzin onbruikbaar, ook als het uitlekt. Daar staat tegenover dat je de wachtwoordzin bij elke verbinding moet typen; hij past dus bij sleutels die mensen met de hand gebruiken, niet bij sleutels voor scripts die vanzelf draaien, zoals cronjobs.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "" -N "example-pass"
Key has comment 'user@example.com'
Your identification has been saved with the new passphrase.

-P is de oude wachtwoordzin en -N de nieuwe. De sleutel had geen wachtwoordzin, dus kreeg -P lege aanhalingstekens, en twee regels meldden dat er opnieuw met de nieuwe wachtwoordzin is opgeslagen. Volgens de handleiding vraagt -p zonder opties om de beurt naar de oude en de nieuwe wachtwoordzin.

ls -l ~/.ssh/id_ed25519
-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519

Na het instellen van de wachtwoordzin groeide het privésleutelbestand van 411 naar 464 bytes.

ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"
Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private key

Bij een sleutel met wachtwoordzin heeft ook -y de wachtwoordzin nodig via -P. Met de juiste wachtwoordzin kwam dezelfde publieke sleutel als eerder, met een verkeerde eindigde het met de fout incorrect passphrase. Volgens de handleiding is een verloren wachtwoordzin niet te herstellen; vergeet je hem, maak dan een nieuwe sleutel en registreer de publieke sleutel opnieuw.

ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"
Old comment: user@example.com
Comment 'user@laptop' applied
cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop

-c wijzigt het commentaar. Oud en nieuw commentaar verschijnen elk op een regel, en ook het commentaar aan het eind van het publieke sleutelbestand werd user@laptop. Het commentaar is alleen een label om sleutels uit elkaar te houden; de sleutelwaarde zelf bleef gelijk.

ssh-keygen -p -f ~/.ssh/id_ed25519 -P "example-pass" -N ""
Key has comment 'user@laptop'
Your identification has been saved with the new passphrase.

Om de wachtwoordzin te verwijderen, geef je -N lege aanhalingstekens. Dezelfde twee regels verschijnen, en daarna werkte -y weer zonder -P.

5️⃣ ssh-keygen -R: hostsleutels uit known_hosts verwijderen

In known_hosts verzamelen zich de hostsleutels van servers waarmee je verbonden was, één per regel. Wordt een server opnieuw geïnstalleerd en verandert de hostsleutel, dan weigert ssh de verbinding omdat de sleutel afwijkt van de opgeslagen sleutel, en de optie die de oude regel verwijdert, is -R. De known_hosts hieronder is een bestand van drie regels met voorbeeldadressen, opgegeven met -f.

cat ~/.ssh/known_hosts
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

Elke regel bevat hostnaam of adres, sleuteltype en sleutelwaarde, in die volgorde. De tweede regel met een komma bevat naam en adres van dezelfde server, en de vierkante haken met dubbele punt in de derde regel staan voor een andere poort dan 22.

ssh-keygen -F 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
192.0.2.10 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk

-F toont de regel van die host samen met het regelnummer. Bij een onbekende host verscheen niets en eindigde de opdracht met exitcode 1.

ssh-keygen -R 192.0.2.10 -f ~/.ssh/known_hosts
# Host 192.0.2.10 found: line 1
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
server2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW

-R verwijdert de regel van die host en bewaart het oorspronkelijke bestand als known_hosts.old. Na het verwijderen bleven er nog twee regels over.

ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hosts
Host 192.0.2.99 not found in /home/user/.ssh/known_hosts
ssh-keygen -R "[192.0.2.30]:2222" -f ~/.ssh/known_hosts
# Host [192.0.2.30]:2222 found: line 2
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old

Bij een onbekende host verscheen alleen één regel not found. Voor een server op een andere poort moet je de vierkante haken en de poort precies zo opgeven als in known_hosts.

ssh-keygen -H -f ~/.ssh/known_hosts
WARNING: /home/user/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
/home/user/.ssh/known_hosts updated.
Original contents retained as /home/user/.ssh/known_hosts.old
cat ~/.ssh/known_hosts
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
|1|AG9QJQvGaQmVsEusSdND1lM9cKI=|Ue0a9suJIzN0yxoJgV7ClLBgSYw= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

-H hasht hostnamen en adressen. Deze optie voorkomt dat een uitgelekt bestand verraadt met welke servers je verbonden was; naam en adres die met een komma verbonden waren, werden in twee gehashte regels gesplitst. Er verscheen ook een waarschuwing dat het .old-bestand nog de ongehashte inhoud bevat.

ssh-keygen -F server2.example.com -f ~/.ssh/known_hosts
# Host server2.example.com found: line 1
|1|JL/knNlx/BnCoOWp5rNeRo3r1rE=|OCPyeFd1rgG8P2QGzrju/V2Y8c4= ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR

Ook in het gehashte bestand vond -F de regel via de naam.

6️⃣ ssh-copy-id: publieke sleutel registreren en authorized_keys

Een sleutel maken is niet genoeg: zolang de server de publieke sleutel niet kent, log je nog steeds met een wachtwoord in. De plek waar de server de publieke sleutel leert kennen, is ~/.ssh/authorized_keys van het account waarop je inlogt, en ssh-copy-id is de opdracht die de .pub-regel in dat bestand zet. De privésleutel blijft op je computer en alleen de regel met de publieke sleutel gaat over. Klik in het diagram hieronder op de stapknoppen om te zien waar de twee bestanden terechtkomen.

🔐 Zo wordt het sleutelpaar van ssh-keygen gebruikt om in te loggen
Uitlegdiagram
🔍 Stappen
$ ssh-keygen -t ed25519 -C user@example.comssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10ssh -i ~/.ssh/id_ed25519 user@192.0.2.10
💻 Mijn computer ~/.ssh
🔒id_ed25519Privésleutel · gaat nooit naar buiten
🔑id_ed25519.pubEén regel publieke sleutel · gekopieerd naar de server
➜Nog niet op de serverEén regel publieke sleutel gekopieerdServer controleert met de publieke sleutel
🖥️ Server ~/.ssh/authorized_keys
📄LeegAlleen inloggen met wachtwoord
🔑ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comGeregistreerde publieke sleutel · alleen de bijbehorende privésleutel komt erin
ssh-keygen maakt de privésleutel en de publieke sleutel als paar. De privésleutel blijft alleen in ~/.ssh op je computer, en de publieke sleutel is de ene regel in het .pub-bestand. In deze stap staat er nog niets op de server, dus log je alleen met een wachtwoord in.
ssh-copy-id voegt de regel met de publieke sleutel toe aan het eind van ~/.ssh/authorized_keys op de server. De privésleutel wordt niet gekopieerd. De publieke sleutel hoeft niet geheim te blijven, dus je kunt dezelfde regel op meerdere servers zetten.
Bij het verbinden controleert de server met de publieke sleutel in authorized_keys de handtekening van je privésleutel. Past het paar, dan ben je zonder wachtwoord ingelogd; op een computer zonder het privésleutelbestand wordt ook bij hetzelfde account om het wachtwoord gevraagd.
ssh-copy-id -n -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
/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: ERROR: ssh: connect to host 192.0.2.10 port 22: Connection timed out

-n is een dry-run, dus er wordt niets naar de server geschreven. Toch probeert ssh-copy-id eerst met die sleutel in te loggen om al geregistreerde sleutels eruit te filteren, en omdat 192.0.2.10 een documentatieadres is, kwam er geen verbinding tot stand en eindigde het met timed out. Opties achter -o gaan ongewijzigd naar ssh.

ssh-copy-id -n -f -i ~/.ssh/deploy_key.pub -o ConnectTimeout=3 user@192.0.2.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/deploy_key.pub"
=-=-=-=-=-=-=-=
Would have added the following key(s):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
=-=-=-=-=-=-=-=

-f is de forceermodus die deze controle overslaat. Samen met -n verscheen onder Would have added de regel met de publieke sleutel die op de server zou komen. Het is dezelfde regel als de inhoud van het .pub-bestand.

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10

De echte registratie doe je met deze opdracht zonder -n. Volgens het ssh-copy-id-script en de handleiding vraagt hij één keer om het wachtwoord van het account, voegt de publieke sleutel toe aan het eind van ~/.ssh/authorized_keys op de server en toont daarna Number of key(s) added: 1. Ontbreken bestand en map, dan maakt hij ze aan, en staat dezelfde sleutel er al, dan slaat hij die over.

ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10

Is de poort niet 22, geef die dan mee met -p.

Waar ssh-copy-id ontbreekt, voeg je de regel met de publieke sleutel zelf toe aan authorized_keys op de server. Log met je wachtwoord in op de server en volg de stappen hieronder. De uitvoer is gecontroleerd door het .pub-bestand op dezelfde server toe te voegen; bij een andere server kopieer je de regel uit het .pub-bestand en voeg je die toe met echo.

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Bestaat de map .ssh niet, maak die dan aan en zet de rechten op 700.

cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.com
ls -l ~/.ssh/authorized_keys
-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keys

De regel met de publieke sleutel staat nu in authorized_keys, met rechten 600. Volgens het onderdeel StrictModes in de handleiding van sshd_config controleert sshd met de standaardinstellingen eerst de rechten van de gebruikersbestanden en weigert het de login als iedereen erin kan schrijven.

ssh -i ~/.ssh/id_ed25519 user@192.0.2.10

Na de registratie verbind je met de privésleutel. Heeft de sleutel een standaardnaam zoals id_ed25519, dan vindt ssh hem zelf; heeft hij een andere naam zoals deploy_key, geef het bestand dan op met de ssh-optie -i.

🔲 Simulator voor de opdracht ssh-keygen

In de simulator hieronder typ je zelf ssh-keygen om sleutels te maken, vingerafdrukken te controleren, de wachtwoordzin te wijzigen, known_hosts op te schonen en ssh-copy-id te proberen. Vingerafdrukken en publieke sleutels zijn dezelfde voorbeeldwaarden als in het artikel, en ssh-copy-id doet alleen alsof het op een virtuele server registreert.

Simulator voor de opdracht ssh-keygenOpenSSH 9.9p1 · user
[root@server work]#
Met de toetsen ↑↓ haal je eerder ingetypte commando's terug.

🔢 FAQ & aanbevolen content

De standaard van ssh-keygen is ed25519, en die sleutel is kort: de regel met de publieke sleutel was 98 bytes. Een rsa-sleutel van 4096 bits had een publieke sleutel van 742 bytes; rsa gebruik je voor oude servers of apparaten die ed25519 niet accepteren.

Ja. Volgens de handleiding van ssh zoekt ssh automatisch alleen naar standaardnamen zoals ~/.ssh/id_ed25519 en ~/.ssh/id_rsa; een andere naam geef je bij het verbinden op met -i of zet je als IdentityFile in ~/.ssh/config.

Volgens de handleiding van sshd_config zet je PasswordAuthentication op no en laat je sshd de configuratie opnieuw inlezen. Zet het pas uit nadat je in een tweede terminal hebt gecontroleerd dat inloggen met de sleutel werkt. Zet je het eerder uit, dan kom je mogelijk met wachtwoord noch sleutel binnen en sluit je jezelf buiten de server.

ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 10   +   1   =