ssh-keygen: SSH-Schlüssel erzeugen, öffentlichen Schlüssel hinterlegen und ssh-copy-id nutzen
ssh-keygen ist der OpenSSH-Befehl, der das Paar aus privatem und öffentlichem Schlüssel für SSH-Verbindungen erzeugt und außerdem Fingerabdrücke prüft, Passphrasen ändert und known_hosts aufräumt. Ich habe auf einem AlmaLinux-9-Server ed25519- und rsa-Schlüssel erzeugt, die Fingerabdrücke geprüft, Passphrase und Kommentar geändert und danach ssh-copy-id im Dry-Run getestet: Zum Server geht nur die eine Zeile mit dem öffentlichen Schlüssel aus der .pub-Datei.
Kontonamen und Pfade der Schlüsseldateien in der Ausgabe unten sind Beispielwerte; Fingerabdrücke, öffentliche Schlüssel und randomart stammen von Schlüsseln, die für diesen Artikel erzeugt und danach gelöscht wurden. Den Befehl, der einen öffentlichen Schlüssel wirklich auf einem Server hinterlegt, zeige ich nur, ausgeführt habe ich ihn nicht.
1️⃣ Schlüssel mit ssh-keygen erzeugen: -t ed25519 und Kommentar mit -C
Schlüssel erzeugst du in der Form ssh-keygen -t Typ -C Kommentar. -t ist der Schlüsseltyp, -C ein Kommentar am Ende des öffentlichen Schlüssels, in den du eine E-Mail-Adresse oder den Zweck schreibst. Unten siehst du die komplette Ausgabe, wenn die Datei mit -f festgelegt ist und du bei beiden Passphrase-Abfragen einfach Enter drückst.
ssh-keygen -t ed25519 -C "user@example.com" -f ~/.ssh/id_ed25519Generating 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]-----+Drückst du bei der Passphrase-Abfrage nur Enter, entsteht ein Schlüssel ohne Passphrase. Lässt du -f weg, fragt vor der Passphrase zuerst eine Zeile nach dem Speicherort. In Klammern steht der Standardpfad .ssh/id_ed25519 in deinem Home-Ordner, und auch hier speichert ein einfaches Enter den Schlüssel dort.
Das randomart am Ende der Ausgabe ist der Fingerabdruck als Bild. Beim Erzeugen und bei der erneuten Prüfung mit -lv kam dasselbe Bild heraus.
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.pubDer private Schlüssel wurde mit den Rechten 600 angelegt, der öffentliche mit 644. Den privaten Schlüssel behältst du nur auf deinem eigenen Rechner und gibst ihn nicht weiter.
cat ~/.ssh/id_ed25519.pubssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comDer öffentliche Schlüssel ist eine einzige Zeile aus Schlüsseltyp, Schlüsselwert und Kommentar, getrennt durch Leerzeichen. Genau diese Zeile kommt in die authorized_keys des Servers, mit dem du dich verbindest. Die Aufgaben der Dateien im Ordner sind als Baum zusammengefasst.
2️⃣ ssh-keygen-Optionen: -f, -N, -b, -q
Fragen zu beantworten ist bequem, wenn du von Hand tippst, in einem Skript müssen die Fragen aber ganz weg. Legst du die Datei mit -f und die Passphrase mit -N fest, wird der Schlüssel sofort ohne Rückfrage erzeugt.
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]-----+Mit leeren Anführungszeichen hinter -N entsteht ein Schlüssel ohne Passphrase, und Speicherort und Fingerabdruck erschienen ohne jede Abfrage in einem Rutsch.
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)?Führst du den Befehl mit demselben Namen noch einmal aus, fragt er nach already exists, ob überschrieben werden soll. Mit n blieb alles unverändert, und der Befehl endete mit Exit-Code 1. Damit du einen Schlüssel im Einsatz nicht versehentlich überschreibst, erzeugst du neue Schlüssel unter einem anderen Namen.
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]-----+Bei rsa legt -b die Länge fest. Laut Handbuch ist der Standard 3072 Bit; oben wurde der Schlüssel mit 4096 Bit erzeugt, und im Kopf des randomart stand RSA 4096. ed25519 hat laut Handbuch eine feste Länge, -b wird dort ignoriert.
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]-----+Ohne -t wurde ein ed25519-Schlüssel erzeugt.
ssh-keygen -q -t ed25519 -f ~/.ssh/backup_key -N "" -C "backup@example.com"; echo rc=$?rc=0Mit -q wird alles ausgeblendet, auch Fingerabdruck und randomart, nur der Exit-Code bleibt. Das nutzt du, wenn ein Skript Schlüssel für mehrere Server erzeugt.
📌 Wichtige Optionen: Ergebnisse aus diesem Artikel
| Option | Was es tut | Ergebnis in diesem Artikel | |
|---|---|---|---|
| -t Typ | Typ des zu erzeugenden Schlüssels | Die erste Zeile der Ausgabe zeigt den Typ wie ed25519 oder rsa; ohne Angabe ed25519 | |
| -C Kommentar | Kommentar am Ende des öffentlichen Schlüssels | user@example.com am Ende des öffentlichen Schlüssels, angezeigt mit cat | |
| -f Datei | Pfad der Schlüsseldatei | Eine Zeile, dass unter /home/user/.ssh/deploy_key gespeichert wurde; erneut mit demselben Namen already exists und Overwrite (y/n)? | |
| -N Passphrase | Neue Passphrase; leere Anführungszeichen bedeuten keine Passphrase | Speicherort und Fingerabdruck in einem Rutsch, ohne Passphrase-Abfrage | |
| -b Bits | Schlüssellänge | Mit 4096 bei rsa steht RSA 4096 im Kopf des randomart | |
| -q | Blendet die gesamte Ausgabe aus | Nur die mit echo ausgegebene Zeile rc=0 bleibt | |
| -l | Gibt den Fingerabdruck einer Schlüsseldatei aus | Derselbe SHA256-Fingerabdruck aus öffentlichem und privatem Schlüssel; bei authorized_keys eine Zeile pro Schlüssel | |
| -E Hash | Legt den Hash-Typ des Fingerabdrucks fest | Mit -E md5 ein Fingerabdruck, der mit MD5:00:7b:02:5e beginnt | |
| -v | Zusammen mit -l auch das randomart | Dasselbe randomart wie beim Erzeugen | |
| -y | Liest den öffentlichen Schlüssel aus dem privaten aus und gibt ihn aus | Eine Zeile öffentlicher Schlüssel, Zeichen für Zeichen gleich der .pub-Datei | |
| -p | Ändert die Passphrase eines privaten Schlüssels | Eine Zeile, dass mit der neuen Passphrase gespeichert wurde; der private Schlüssel wächst von 411 auf 464 Byte | |
| -P Passphrase | Alte Passphrase (die gerade gesetzte) | Mit der richtigen Passphrase der öffentliche Schlüssel, mit einer falschen incorrect passphrase supplied to decrypt private key | |
| -c | Ändert den Kommentar; der neue kommt mit -C | Old comment: user@example.com und Comment 'user@laptop' applied | |
| -F Host | Sucht die Zeile dieses Hosts in known_hosts | # Host 192.0.2.10 found: line 1 und die Zeile selbst | |
| -R Host | Löscht die Zeile dieses Hosts aus known_hosts | known_hosts updated und die Originaldatei known_hosts.old; ein unbekannter Host ergibt not found | |
| -H | Hasht Hostnamen und Adressen in known_hosts | Zeilen beginnen mit |1|, dazu eine WARNING, dass die .old-Datei die ungehashten Zeilen enthält |
📎 Weitere Optionen: laut offiziellem Handbuch
| Option | Was es tut | |
|---|---|---|
| -a Runden | KDF-Runden (bcrypt_pbkdf) beim Speichern des privaten Schlüssels; mehr Runden machen die Passphrase-Prüfung langsamer und Brute-Force schwerer; Standard 16 | |
| -A | Erzeugt fehlende Host-Schlüssel für jeden Standardtyp (rsa, ecdsa, ed25519) in den Standardpfaden | |
| -B | Gibt den bubblebabble-Digest einer Schlüsseldatei aus | |
| -e | Wandelt einen OpenSSH-Schlüssel ins -m-Format (Standard RFC4716) um und gibt ihn aus, für andere SSH-Programme | |
| -i | Wandelt einen Schlüssel ohne Passphrase im -m-Format (Standard RFC4716) ins OpenSSH-Format um und gibt ihn aus | |
| -m Format | Legt das Schlüsselformat fest (RFC4716, PKCS8, PEM); mit -p werden private Schlüssel zwischen OpenSSH- und PEM-Format umgewandelt | |
| -r Host | Gibt aus dem öffentlichen Schlüssel den SSHFP-DNS-Eintrag für diesen Hostnamen aus | |
| -s CA-Schlüssel | Signiert einen öffentlichen Schlüssel mit einem CA-Schlüssel und erzeugt ein Zertifikat | |
| -L | Gibt den Inhalt eines Zertifikats aus | |
| -K | Lädt die auf einem FIDO-Authenticator gespeicherten resident-Schlüssel in den aktuellen Ordner | |
| -Y sign | Signiert eine Datei mit einem SSH-Schlüssel; die Signatur wird mit angehängtem .sig gespeichert, der Namensraum kommt mit -n |
3️⃣ ssh-keygen -l für den Fingerabdruck und -y zum Auslesen des öffentlichen Schlüssels
Gibt es mehrere Schlüsseldateien, lässt sich am Dateinamen allein schwer erkennen, welcher öffentliche Schlüssel zu welchem privaten gehört. Da der Fingerabdruck für privaten und öffentlichen Schlüssel gleich ist, bestätigst du das Paar, indem du die Fingerabdrücke beider Dateien mit -l vergleichst.
ssh-keygen -l -f ~/.ssh/id_ed25519.pub256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)ssh-keygen -l -f ~/.ssh/id_ed25519256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)Öffentliche und private Schlüsseldatei lieferten denselben SHA256-Fingerabdruck. Die 256 vorne ist die Schlüssellänge, die Klammer am Ende der Schlüsseltyp.
ssh-keygen -l -E md5 -f ~/.ssh/id_ed25519.pub256 MD5:00:7b:02:5e:b8:ba:85:0c:32:d7:15:7e:72:45:f7:bc user@example.com (ED25519)Mit -E md5 wechselt die Ausgabe zum älteren MD5-Fingerabdruck. Das brauchst du zum Abgleich, wenn ein alter Server oder ein Verwaltungsbereich MD5-Fingerabdrücke anzeigt.
ssh-keygen -lv -f ~/.ssh/id_ed25519.pub256 SHA256:c73KJh85pPijvy43kS1uaQo77fSsGlE4Wz+aMF+sTy8 user@example.com (ED25519)
+--[ED25519 256]--+
| |
| . |
| o o |
| = o . |
| = Soo . |
| = *+*.. . |
| o.B.o++ . |
| .=o*Eo.+ |
| o+=@OO= |
+----[SHA256]-----+Mit -v dazu erscheint das randomart erneut. Es war dasselbe Bild wie beim Erzeugen des Schlüssels.
ssh-keygen -l -f ~/.ssh/authorized_keys256 SHA256:Rhk2/tgn59K8jtvDWJTOLiYnToM8t4gkdaMfu6TJ0oM deploy@example.com (ED25519)Gibst du eine Datei mit mehreren Zeilen öffentlicher Schlüssel an, etwa authorized_keys, bekommst du pro Schlüssel eine Zeile Fingerabdruck. So prüfst du, welche Schlüssel auf einem Server hinterlegt sind.
ssh-keygen -y -f ~/.ssh/id_ed25519ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.com-y liest den öffentlichen Schlüssel erneut aus dem privaten aus. Hast du die .pub-Datei gelöscht oder nur den privaten Schlüssel auf einen anderen Rechner gebracht, speicherst du diese Ausgabe einfach in eine Datei. Die Ausgabe war Zeichen für Zeichen gleich der ursprünglichen .pub-Datei.
4️⃣ ssh-keygen -p zum Ändern der Passphrase und -c zum Ändern des Kommentars
Mit einer Passphrase auf dem privaten Schlüssel ist die Datei ohne Passphrase nicht nutzbar, selbst wenn sie in fremde Hände gerät. Dafür musst du die Passphrase bei jeder Verbindung eingeben; sie passt also zu Schlüsseln, die Menschen von Hand nutzen, nicht zu Schlüsseln für automatisch laufende Skripte wie 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 ist die alte Passphrase, -N die neue. Der Schlüssel hatte keine Passphrase, daher bekam -P leere Anführungszeichen, und zwei Zeilen meldeten, dass mit der neuen Passphrase neu gespeichert wurde. Laut Handbuch fragt -p allein ohne Optionen nacheinander nach alter und neuer Passphrase.
ls -l ~/.ssh/id_ed25519-rw------- 1 user user 464 Oct 29 08:22 /home/user/.ssh/id_ed25519Nach dem Setzen der Passphrase wuchs die private Schlüsseldatei von 411 auf 464 Byte.
ssh-keygen -y -f ~/.ssh/id_ed25519 -P "example-pass"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@example.comssh-keygen -y -f ~/.ssh/id_ed25519 -P "wrongpass"Load key "/home/user/.ssh/id_ed25519": incorrect passphrase supplied to decrypt private keyBei einem Schlüssel mit Passphrase braucht auch -y die Passphrase über -P. Mit der richtigen Passphrase kam derselbe öffentliche Schlüssel wie vorher, mit einer falschen endete es mit dem Fehler incorrect passphrase. Laut Handbuch lässt sich eine verlorene Passphrase nicht wiederherstellen; vergisst du sie, erzeugst du einen neuen Schlüssel und hinterlegst den öffentlichen Schlüssel erneut.
ssh-keygen -c -C "user@laptop" -f ~/.ssh/id_ed25519 -P "example-pass"Old comment: user@example.com
Comment 'user@laptop' appliedcat ~/.ssh/id_ed25519.pubssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJVLiw04ugfXq15n2m8ZDW0OywkRoug8beXw/9VnVY/L user@laptop-c ändert den Kommentar. Alter und neuer Kommentar erscheinen je in einer Zeile, und auch der Kommentar am Ende der öffentlichen Schlüsseldatei wurde zu user@laptop. Der Kommentar ist nur eine Markierung zur Unterscheidung, der Schlüsselwert selbst blieb gleich.
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.Um die Passphrase zu entfernen, gibst du -N leere Anführungszeichen. Es erscheinen dieselben zwei Zeilen, und danach lief -y wieder ohne -P.
5️⃣ ssh-keygen -R: Host-Schlüssel aus known_hosts löschen
In known_hosts sammeln sich die Host-Schlüssel der Server, mit denen du verbunden warst, je eine Zeile. Wird ein Server neu installiert und ändert sich sein Host-Schlüssel, verweigert ssh die Verbindung, weil der Schlüssel vom gespeicherten abweicht, und die Option, die die alte Zeile löscht, ist -R. Das known_hosts unten ist eine Datei aus drei Zeilen mit Beispieladressen, angegeben mit -f.
cat ~/.ssh/known_hosts192.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+tERrbeFIyExAodSEUhE9j5WMpkRWJede Zeile enthält Hostname oder Adresse, Schlüsseltyp und Schlüsselwert in dieser Reihenfolge. Die zweite Zeile mit Komma enthält Name und Adresse desselben Servers, und eckige Klammern mit Doppelpunkt in der dritten Zeile stehen für einen anderen Port als 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 gibt die Zeile dieses Hosts zusammen mit ihrer Zeilennummer aus. Bei einem unbekannten Host kam keine Ausgabe, und der Befehl endete mit Exit-Code 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.oldcat ~/.ssh/known_hostsserver2.example.com,192.0.2.20 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID3s6oYeTCz7KeYs0f/60/Ix0DhmK4hf1uHCC10TrXyR
[192.0.2.30]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0WmcBD2HIsiSn+tERrbeFIyExAodSEUhE9j5WMpkRW-R löscht die Zeile dieses Hosts und behält die Originaldatei als known_hosts.old. Nach dem Löschen blieben nur zwei Zeilen übrig.
ssh-keygen -R 192.0.2.99 -f ~/.ssh/known_hostsHost 192.0.2.99 not found in /home/user/.ssh/known_hostsssh-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.oldBei einem unbekannten Host kam nur eine Zeile not found. Für einen Server mit anderem Port musst du eckige Klammern und Port genau so angeben, wie sie in known_hosts stehen.
ssh-keygen -H -f ~/.ssh/known_hostsWARNING: /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.oldcat ~/.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 und Adressen. Die Option verhindert, dass eine geleakte Datei verrät, mit welchen Servern du verbunden warst; Name und Adresse, die per Komma verbunden waren, wurden in zwei gehashte Zeilen aufgeteilt. Dazu kam die Warnung, dass die .old-Datei noch den ungehashten Inhalt enthält.
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/Ix0DhmK4hf1uHCC10TrXyRAuch in der gehashten Datei fand -F die Zeile über den Namen.
6️⃣ ssh-copy-id: öffentlichen Schlüssel hinterlegen und authorized_keys
Ein erzeugter Schlüssel allein reicht nicht: Solange der Server den öffentlichen Schlüssel nicht kennt, meldest du dich weiter mit Passwort an. Bekannt gemacht wird der öffentliche Schlüssel in ~/.ssh/authorized_keys des Kontos, mit dem du dich anmeldest, und ssh-copy-id ist der Befehl, der die .pub-Zeile in diese Datei schreibt. Der private Schlüssel bleibt auf deinem Rechner, nur die Zeile mit dem öffentlichen Schlüssel geht hinüber. Drück im Diagramm unten auf die Schritt-Schaltflächen, um zu sehen, wo die beiden Dateien landen.
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 ist ein Dry-Run, auf den Server wird also nichts geschrieben. Trotzdem versucht ssh-copy-id zuerst, sich mit diesem Schlüssel anzumelden, um bereits hinterlegte Schlüssel auszusortieren, und weil 192.0.2.10 eine Dokumentationsadresse ist, kam keine Verbindung zustande, und es endete mit timed out. Optionen hinter -o gehen unverändert an 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 ist der Force-Modus, der diese Prüfung überspringt. Zusammen mit -n erschien unter Would have added die Zeile mit dem öffentlichen Schlüssel, die auf den Server käme. Es ist dieselbe Zeile wie der Inhalt der .pub-Datei.
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.0.2.10Das eigentliche Hinterlegen erledigt dieser Befehl ohne -n. Laut ssh-copy-id-Skript und Handbuch fragt er einmal nach dem Passwort des Kontos, hängt den öffentlichen Schlüssel ans Ende von ~/.ssh/authorized_keys auf dem Server und gibt dann Number of key(s) added: 1 aus. Fehlen Datei und Ordner, legt er sie an, und ist derselbe Schlüssel schon vorhanden, überspringt er ihn.
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@192.0.2.10Ist der Port nicht 22, gibst du ihn mit -p mit.
Wo es kein ssh-copy-id gibt, hängst du die Zeile mit dem öffentlichen Schlüssel selbst an die authorized_keys des Servers an. Melde dich mit deinem Passwort am Server an und geh in der folgenden Reihenfolge vor. Die Ausgabe wurde geprüft, indem die .pub-Datei auf demselben Server angehängt wurde; bei einem anderen Server kopierst du die Zeile aus der .pub-Datei und hängst sie mit echo an.
mkdir -p ~/.sshchmod 700 ~/.sshFehlt der Ordner .ssh, legst du ihn an und setzt die Rechte auf 700.
cat ~/.ssh/deploy_key.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keyscat ~/.ssh/authorized_keysssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKKphFOc7oiKNpIHFTzK/ippCS5U5D+lF3xmXM6dmYjk deploy@example.comls -l ~/.ssh/authorized_keys-rw------- 1 user user 100 Oct 29 08:22 /home/user/.ssh/authorized_keysDie Zeile mit dem öffentlichen Schlüssel steht jetzt in authorized_keys, mit den Rechten 600. Laut dem Eintrag StrictModes im sshd_config-Handbuch prüft sshd in der Standardeinstellung zuerst die Rechte der Benutzerdateien und lehnt die Anmeldung ab, wenn jeder darauf schreiben darf.
ssh -i ~/.ssh/id_ed25519 user@192.0.2.10Nach dem Hinterlegen verbindest du dich mit dem privaten Schlüssel. Hat der Schlüssel einen Standardnamen wie id_ed25519, findet ssh ihn von selbst; hat er einen anderen Namen wie deploy_key, gibst du die Datei mit der ssh-Option -i an.
🔲 Simulator für den Befehl ssh-keygen
Im Simulator unten kannst du ssh-keygen selbst eintippen: Schlüssel erzeugen, Fingerabdruck prüfen, Passphrase ändern, known_hosts aufräumen und ssh-copy-id ausprobieren. Fingerabdrücke und öffentliche Schlüssel sind dieselben Beispielwerte wie im Artikel, und ssh-copy-id tut nur so, als würde es auf einem virtuellen Server hinterlegen.
🔢 FAQ & empfohlene Inhalte
Windows · Öffentlicher Schlüssel
Öffentlichen Schlüssel in Xshell erzeugen
So erzeugst du mit dem Schlüsselassistenten des Windows-SSH-Clients Xshell einen öffentlichen Schlüssel und hinterlegst ihn auf dem Server.
SSH · Servereinstellungen
SSH-Konfiguration: Funktionen und Einstellungen der Datei sshd_config
Artikel über Einstellungen wie Port, Root-Anmeldung und Authentifizierung per öffentlichem Schlüssel in der sshd_config des empfangenden Servers.
Linux · Grundlagen
SSH unter Linux: Definition und Grundeinstellungen
Was SSH ist, wie es sich von Telnet unterscheidet und wie du sshd auf einem Server startest und die Grundeinstellungen prüfst.
ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.