
SSH-keygen ist ein essentielles Kommandozeilenwerkzeug zur Erstellung, Verwaltung und Konvertierung von Authentifizierungsschlüsseln für SSH-Verbindungen. Das Tool ist integraler Bestandteil der OpenSSH-Suite und steht auf nahezu allen modernen Betriebssystemen zur Verfügung, einschließlich Raspberry Pi, Linux, macOS sowie Windows 10 und 11.
Konvertieren eines öffentlichen SSH-Schlüssel vom OpenSSH-Standardformat in das RFC4716-Format
Die Konvertierung zwischen beiden Formaten ist vollständig reversibel und verlustfrei. Der kryptographische Inhalt bleibt identisch – lediglich die Darstellung ändert sich durch Hinzufügen oder Entfernen von Zeilenumbrüchen bei 70 Zeichen sowie durch Modifikation der Header-Strukturen. Beide Formate repräsentieren denselben öffentlichen Schlüssel und bieten identische Sicherheitseigenschaften.
Das RFC4716-Format unterstützt zusätzliche Header-Felder wie Subject, Comment oder x-command, die im OpenSSH-Standardformat nicht verfügbar sind. Diese Header ermöglichen die Speicherung von Metadaten wie dem Benutzernamen, unter dem der Schlüssel generiert wurde, oder spezifischen Kommandos, die bei der Authentifizierung ausgeführt werden sollen.
Grundsätzlich wird RFC4716 immer dann benötigt, wenn Systeme, Weboberflächen oder Dienste explizit dieses standardisierte Format verlangen (wie z.B. OpenMediaVault und Hetzner Storage Boxes), anstatt das verbreitete OpenSSH-Einzeilenformat zu akzeptieren.
RFC4716-Dateien haben keinen standardisierten Dateinamenpräfix oder eine fest vorgeschriebene Dateiendung. Der RFC4716-Standard definiert ausschließlich den Dateiinhalt, nicht jedoch Namenskonventionen für die Dateien selbst.
Dateinamenskonventionen in der Praxis
In der Praxis werden verschiedene Dateiendungen verwendet:
.pub wird häufig verwendet, da es sich um öffentliche Schlüssel handelt
.pem wird manchmal genutzt, ist aber technisch ungenau, da PEM ein anderes Format darstellt
Keine spezifische Endung ist ebenfalls möglich, da der Dateiinhalt durch die Header-Marker eindeutig identifizierbar ist
Die Wahl der Dateiendung ist letztlich eine Konventionsfrage und hat keine funktionalen Auswirkungen auf die Verarbeitung des Schlüssels durch ssh-keygen oder andere SSH-Tools
Nun aber zu dem Beispiel Ablauf wie oben im Aktivitätsdiagramm gezeigt, kann auf dem Raspberry Pi wie folgt laufen:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ ssh-keygen -C "test-email@example.de" -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (/home/thomas/.ssh/id_ed25519): ./id_ed25519 Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ./id_ed25519 Your public key has been saved in ./id_ed25519.pub The key fingerprint is: SHA256:bNVwVsBMxNBD4g9CQfpPARFVPNI7rYIA/ECUb86m0Zk test-email@example.de The key's randomart image is: +--[ED25519 256]--+ | +o. .B==&Oo. | | = o o.*X | | =. . =..= | | =o o +o . | | = +S.. .o | | . E..o. . | | + .. | | . | | | +----[SHA256]-----+ thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ ls id_ed25519 id_ed25519.pub thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ cat id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF3wbVQegwOG3cqyyurqTy85UHQBe7Kd56guPjoEsr9D test-email@example.de thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ cat id_ed25519 -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW QyNTUxOQAAACBd8G1UHoMDht3Kssrq6k8vOVB0AXuyneeoLj46BLK/QwAAAJit48x1rePM dQAAAAtzc2gtZWQyNTUxOQAAACBd8G1UHoMDht3Kssrq6k8vOVB0AXuyneeoLj46BLK/Qw AAAEC3PSq/jJ1LDLD+45OWWJu/Zwpp6uu4k03xAay1wPs9A13wbVQegwOG3cqyyurqTy85 UHQBe7Kd56guPjoEsr9DAAAAFXRlc3QtZW1haWxAZXhhbXBsZS5kZQ== -----END OPENSSH PRIVATE KEY----- thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ ssh-keygen -f id_ed25519.pub -e -m RFC4716 > id_ed25519.rfc4716 thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ cat id_ed25519.rfc4716 ---- BEGIN SSH2 PUBLIC KEY ---- Comment: "256-bit ED25519, converted by thomas@pi-kleinhirn" AAAAC3NzaC1lZDI1NTE5AAAAIF3wbVQegwOG3cqyyurqTy85UHQBe7Kd56guPjoEsr9D ---- END SSH2 PUBLIC KEY ---- thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ ssh-keygen -i -f id_ed25519.rfc4716 > id_ed25519_restored.pub thomaswenzlaff@pi-kleinhirn:~/ssh-keygen-beispiel $ cat id_ed25519_restored.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF3wbVQegwOG3cqyyurqTy85UHQBe7Kd56guPjoEsr9D |
Hier die Befehle als Kopiervorlage:
|
1 2 3 4 5 6 7 8 9 10 |
mkdir ssh-keygen-beispiel cd ssh-keygen-beispiel/ ssh-keygen -C "test-email@example.de" -t ed25519 ls cat id_ed25519.pub cat id_ed25519 ssh-keygen -f id_ed25519.pub -e -m RFC4716 > id_ed25519.rfc4716 cat id_ed25519.rfc4716 ssh-keygen -i -f id_ed25519.rfc4716 > id_ed25519_restored.pub cat id_ed25519_restored.pub |
Diagramm als rfc-key.pdf.
