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.
PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
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 zB echo 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,
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:
ssh-keygen -y -f id_rsa | cut -d' ' -f 2
mit
cut -d' ' -f 2 id_rsa.pub
Deshalb:
diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)
Vielleicht ist das nicht so flexibel, aber es ist besser für meine Bedürfnisse. Vielleicht hilft es jemand anderem.
Wenn sie sich auf Ihrem lokalen System befinden, bleiben id_rsa.pub
Sie bei $HOME/.ssh/authorized_keys
und ssh
und localhost
verwenden den id_rsa
Schlüssel. Wenn es funktioniert, stimmen sie überein.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
hilft auch sehr.