ssh-keygen -y -e -f <private key>Nimmt einen privaten Schlüssel und druckt den entsprechenden öffentlichen Schlüssel aus, der direkt mit Ihren verfügbaren öffentlichen Schlüsseln verglichen werden kann. (Hinweis: Vorsicht vor Kommentaren oder Schlüsseloptionen.)
(Wie zum Teufel macht es das? Ich kann nur hoffen, dass der öffentliche Schlüssel direkt oder indirekt im privaten Schlüssel verschlüsselt ist ...)
Ich brauchte das selbst und benutzte den folgenden Bash-Einzeiler. Es sollte nichts ausgegeben werden, wenn die Schlüssel zusammengehören. Wenden Sie ein wenig -qauf das diff in Skripten an und diff setzt nur den Rückgabecode entsprechend.
@MichaelHampton: jetzt verstehe ich deinen Kommentar. "Die akzeptierte Antwort" sollte sich auf die Frage zum Stackoverflow beziehen, nicht auf diese Frage ...
Michuelnik
1
@ Sirch: Ich dachte, die Entscheidung, welcher Schlüssel privat und welcher öffentlich ist, ist rein zufällig, da die beiden Schlüssel gleich sind. Was ein Schlüssel verschlüsselt, kann nur mit dem anderen entschlüsselt werden. Und wenn ein Schlüssel vom anderen erhalten werden könnte, würde dies alles nicht funktionieren.
Michuelnik
1
@Michuelnik Sie können den öffentlichen Schlüssel vom privaten Schlüssel ableiten. Sie können den privaten Schlüssel nicht vom öffentlichen Schlüssel ableiten. Wir haben nicht über das Material gesprochen, das es verschlüsselt.
Sirch
1
@Michuelnik imho, die Frage ist off Topic auf SO und on Topic hier (und / oder Superuser). imho, es sollte nicht als doppelt markiert und stattdessen für die Migration markiert werden. Aber es geht um beides, also mag ich den umfassenderen Austausch von Informationen.
Chris K
10
Solange id_rsa.pub existiert, ssh-keygen -y -e -f id_rsawird id_rsa nicht überprüft, sondern nur der Wert von id_rsa.pub zurückgegeben. Wenn Sie also zB echo 5 > id_rsaden privaten Schlüssel löschen, dann machen Sie den Diff, der Diff geht vorbei! ssh-keygen -yef fooWenn Sie ausführen , bei dem foo kein gültiger Schlüssel ist (und keine entsprechende Datei foo.pub hat), wird das Warten auf Benutzereingaben blockiert. Gehen Sie daher bei der Verwendung dieses Befehls in einem Skript vorsichtig vor.
32
Abhängig davon, wo Sie die zu testende öffentliche Schlüsseldatei erhalten, kann die akzeptierte Antwort zu falsch positiven Ergebnissen führen. Dies liegt an dem Verhalten, das in dem Kommentar von @drewbenn beschrieben wird. Insbesondere wenn die Option -e mit der privaten Schlüsseldatei als Optionsparameter -f verwendet wird, werden die Inhalte der zugehörigen öffentlichen Schlüsseldatei einfach nachgebildet (aber neu formatiert).
Mit anderen Worten,
ssh-keygen -y -f id_rsa
(anscheinend) erzeugt den öffentlichen Schlüsselwert und
ssh-keygen -y -e -f id_rsa
einfach und Ausgänge (und reformats) der Schlüssel in der bestehenden id_rsa.pub was auch immer es ist .
In meinem Fall muss ich sicherstellen, dass das Paar nicht beschädigt wurde. Deshalb habe ich beschlossen, Folgendes zu vergleichen:
Dies sollte die akzeptierte Antwort wirklich ersetzen oder zumindest in Bezug auf Upvotes übertreffen.
Thomanski
Danke! Dieser Befehl funktioniert nicht mit Schlüsseln mit einer Passphrase, das wird nicht interaktiv abgefragt. Ich habe die two () -Befehlsinhalte in Dateien extrahiert und diese verteilt, das funktioniert.
Jaroslaw Nikitenko
5
Wenn sie sich auf Ihrem lokalen System befinden, bleiben id_rsa.pubSie bei $HOME/.ssh/authorized_keysund sshund localhostverwenden den id_rsaSchlüssel. Wenn es funktioniert, stimmen sie überein.
ssh -v
hilft auch sehr.Antworten:
Ich würde die
ssh-keygen -y -e -f <private key>
Art und Weise anstelle der akzeptierten Antwort von Wie teste ich ein öffentliches / privates DSA-Schlüsselpaar? auf Stapelüberlauf.ssh-keygen -y -e -f <private key>
Nimmt einen privaten Schlüssel und druckt den entsprechenden öffentlichen Schlüssel aus, der direkt mit Ihren verfügbaren öffentlichen Schlüsseln verglichen werden kann. (Hinweis: Vorsicht vor Kommentaren oder Schlüsseloptionen.)(Wie zum Teufel macht es das? Ich kann nur hoffen, dass der öffentliche Schlüssel direkt oder indirekt im privaten Schlüssel verschlüsselt ist ...)
Ich brauchte das selbst und benutzte den folgenden Bash-Einzeiler. Es sollte nichts ausgegeben werden, wenn die Schlüssel zusammengehören. Wenden Sie ein wenig
-q
auf das diff in Skripten an und diff setzt nur den Rückgabecode entsprechend.quelle
ssh-keygen -y -e -f id_rsa
wird id_rsa nicht überprüft, sondern nur der Wert von id_rsa.pub zurückgegeben. Wenn Sie also zBecho 5 > id_rsa
den privaten Schlüssel löschen, dann machen Sie den Diff, der Diff geht vorbei!ssh-keygen -yef foo
Wenn Sie ausführen , bei dem foo kein gültiger Schlüssel ist (und keine entsprechende Datei foo.pub hat), wird das Warten auf Benutzereingaben blockiert. Gehen Sie daher bei der Verwendung dieses Befehls in einem Skript vorsichtig vor.Abhängig davon, wo Sie die zu testende öffentliche Schlüsseldatei erhalten, kann die akzeptierte Antwort zu falsch positiven Ergebnissen führen. Dies liegt an dem Verhalten, das in dem Kommentar von @drewbenn beschrieben wird. Insbesondere wenn die Option -e mit der privaten Schlüsseldatei als Optionsparameter -f verwendet wird, werden die Inhalte der zugehörigen öffentlichen Schlüsseldatei einfach nachgebildet (aber neu formatiert).
Mit anderen Worten,
(anscheinend) erzeugt den öffentlichen Schlüsselwert und
einfach und Ausgänge (und reformats) der Schlüssel in der bestehenden id_rsa.pub was auch immer es ist .
In meinem Fall muss ich sicherstellen, dass das Paar nicht beschädigt wurde. Deshalb habe ich beschlossen, Folgendes zu vergleichen:
mit
Deshalb:
Vielleicht ist das nicht so flexibel, aber es ist besser für meine Bedürfnisse. Vielleicht hilft es jemand anderem.
quelle
Wenn sie sich auf Ihrem lokalen System befinden, bleiben
id_rsa.pub
Sie bei$HOME/.ssh/authorized_keys
undssh
undlocalhost
verwenden denid_rsa
Schlüssel. Wenn es funktioniert, stimmen sie überein.quelle