Manchmal möchte man wissen, ob ein SSH-PrivateKey auf einen SSH-PublicKey
“passt” oder man hat nur den SSH-PrivateKey zur Hand und und
muß daraus den PubKey ermitteln. Hier zeige ich, wie beides geht.
Namenskonventionen
Üblicherweise liegen die SSH-Keys in “${HOME}/.ssh”
und folgen diesem Schema:
(dateiname).pub … SSH-PublicKey
(dateiname) … SSH-PrivateKey
SSH-PublicKey aus SSH-PrivateKey ermitteln
Grundsätzlich kann der SSH-PublicKey mit dem Kommando ssh-keygen -e -f (dateiname)
ermittelt werden. Die Ausgabe kann aber nur schwer mit dem SSH-PublicKey verglichen werden
wegen:
Kopf- und Fußzeilen
Zeilenumbrüchen
Fehlender Schlüsseltyp
Wenn man den ermittelten Key mit ssh-keygen -i -f (zwischendateiname)
bearbeitet, dann sieht die Ausgabe davon fast so aus wie der SSH-PublicKey.
12345678910111213141516
$ ssh-keygen -e -f "${HOME}/.ssh/(dateiname)"
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "4096-bit RSA, converted by uli@uli-desktop from OpenSSH"
AAAAB3NzaC1yc2EAAAADAQABAAACAQCNVN1BBw8NEn6Pwf1/ZWkDio7HNTuvrMGOzKmd2g
ef+1qPUSTx8VR/9v38AEjPgYCE8ejtp7og6JrBq2qqRLCnLBjxeyU67wmlgUnDwf76LYRE
...
EA2w+X5PlQYvRw==
---- END SSH2 PUBLIC KEY ----
# Die Zeilenumbrüche und die Kopf- und Fußzeilen stören
$ ssh-keygen -e -f "${HOME}/.ssh/(dateiname)"|head -n -1|tail -n +3|tr -d "\r\n"
AAAAB3NzaC1yc2EAA...eyU67wmlgUnDwf76LYRE...EA2w+X5PlQYvRw==
# Noch besser geht die Wandlung via 2x ssh-keygen
$ ssh-keygen -e -f "${HOME}/.ssh/(dateiname)"| ssh-keygen -i -f /dev/stdin
ssh-rsa AAAAB3NzaC1yc2EAA...eyU67wmlgUnDwf76LYRE...EA2w+X5PlQYvRw==
Schlüsselvergleich
Nachfolgend ein Skript, welches prüft, ob der SSH-PublicKey und der SSH-PrivateKey zusammenpassen.
Wenn sie zusammenpassen, dann erfolgt keine Ausgabe. Bei nicht passenden Keys werden beide ausgegeben
kombiniert mit einer Fehlermeldung.