Ich versuche, mein SSH-Setup mit diesem Material zu härten. Es funktioniert gut, aber ich habe eine Frage, auf die ich Schwierigkeiten habe, eine Antwort zu finden.
Weiß jemand, ob es eine Möglichkeit gibt, die Signatur des SSH-Host-/Benutzerzertifikats mit der SSH-Zertifizierungsstelle zu vergleichen? Ich weiß, dass ich einfach versuchen kann, per ssh in einen Host zu gelangen, der dieses Host-Zertifikat enthält, und wenn es eine Verbindung herstellt, ist die Signatur offensichtlich in Ordnung…
Aber ich schreibe eine Automatisierungsaufgabe und brauche einen programmgesteuerten Weg, um dies sicherzustellen Die Zertifikatsdatei ist von CA signiert. Sagen Sie etwas ssh-keygen
Befehl oder etwas anderes.
AKTUALISIERUNG:
Wie @PKapp vorgeschlagen hat:
Ich konnte zwei Ausgaben vergleichen:den Fingerabdruck der signierenden Zertifizierungsstelle vom serverseitigen Zertifikat und den Fingerabdruck der Zertifizierungsstelle selbst
sudo ssh-keygen -L -f /etc/ssh/ssh_host_ed25519_key-cert.pub | fgrep "Signing CA" | sed 's/^[ t]*//' | cut -d ' ' -f 4
SHA256:LkdPQLdx4tuZp7pG0g6nAJqilFd6ZzjGdgVEV9elrdA
sudo ssh-keygen -l -f /etc/ssh/id_ed25519-HostCA.pub | cut -d ' ' -f 2
SHA256:LkdPQLdx4tuZp7pG0g6nAJqilFd6ZzjGdgVEV9elrdA
Wenn die gefilterten Ausgaben identisch sind, dann stimmen die Zertifikate überein…
Akzeptierte Antwort:
Um SSH-Host-Zertifikate aus der Ferne zu erhalten, können Sie ssh-keyscan -c <hostname>
verwenden (ohne das -c
erhalten Sie nur den/die Gastgeberschlüssel). Um sich auf einen bestimmten Zertifikatstyp zu beschränken, können Sie -t type
einfügen , mit ssh-rsa
nicht [email protected]
, falls erforderlich.
Anschließend können Sie die Zertifikatsdetails, einschließlich des öffentlichen Schlüssels der signierenden CA, mit ssh-keygen -L -f <certfile>
extrahieren . Wenn Sie (Kleinbuchstaben) -l
verwenden stattdessen dann ssh-keygen
gibt nur die Informationen über den zugrunde liegenden (öffentlichen) Hostschlüssel aus, der in das Zertifikat eingebettet ist, und nicht alle Zertifikatselemente.