2010-06-04 6 views
9

ssh-add -l zeigt an, dass ich meinem SSH-Agenten 3 RSA-Schlüssel hinzugefügt habe. ssh-add -L zeigt die öffentlichen Schlüssel an. Wie bekomme ich auch die privaten Schlüssel, damit ich sie in einer Datei speichern kann? Oder ist es von Entwurf, dass dies unmöglich ist, d. H. Ssh-agent kann aufgefordert werden, Operationen unter Verwendung des privaten Schlüssels auszuführen, aber es wird niemals den Schlüssel selbst zurückgeben? Wenn es so ist, wie kann ich dann eine Nummer für mich verschlüsseln/entschlüsseln?Wie extrahiert man private Schlüssel von einem ssh-Agenten?

Es ist OK, dass ich Code dafür schreiben muss (die Programmiersprache ist nicht wichtig), aber ich würde lieber ein vorhandenes Werkzeug oder eine Bibliothek verwenden.

Antwort

5

Ich habe gerade eine sehr gute Erklärung gefunden, wie ssh-agent funktioniert: http://www.unixwiz.net/techtips/ssh-agent-forwarding.html. Dies beantwortet teilweise einige meiner Fragen.

  • Eines der cleveren Aspekte des Agenten ist, wie es die Identität eines Benutzers überprüfen kann (oder genauer gesagt, den Besitz eines privaten Schlüssels), ohne dass irgendjemand, dass die privaten Schlüssel enthüllt.

  • Einer der Sicherheitsvorteile der Agentenweiterleitung besteht darin, dass der private Schlüssel des Benutzers niemals auf Remote-Systemen oder auf der Leitung erscheint, auch nicht in verschlüsselter Form.

Soweit ich das die Erklärung dort verstanden, das Protokoll zwischen dem SSH-Client und dem ssh-agent proviedes keine Möglichkeit, in SSH1 oder SSH2 die privaten Schlüssel von einem ssh-agent raus.

+2

Das ist nicht wirklich eine Antwort auf die Frage - nämlich, ob es irgendeinen Weg gibt, ssh-agent nach seinen entschlüsselten Schlüsseln zu fragen, zum Beispiel um sie einem anderen SSH-Client zuzuführen, der nicht weiß, wie er ssh-agent verwenden soll. –

+2

Die Antwort auf die Frage: Nein, das ist nicht möglich. Was ist möglich, Lis in dem verknüpften Dokument aufgeführt, und dies ist nicht. – pts

+1

Ganz im Gegenteil, alles ist möglich in einer virtuellen Welt, es hängt nur von der Zeit und dem Aufwand ab, um das Ziel zu erreichen. So können Sie zum Beispiel Schlüssel von ssh-agent extrahieren/stehlen: https://blog.netspi.com/stealing-unencrypted-ssh-agent-keys-from-memory/ – galaxy

-1

Dies ist mehr eine Sysadmin-Frage, aber schauen Sie einfach in ~/.ssh/id_rsa oder id_dsa für die privaten Schlüssel. Sie mussten zuerst in ssh-agent einsteigen ...

+0

Ich weiß über die '~/.ssh/id *' Dateien, und mir ist es egal. Ich möchte Zugang zu den Schlüsseln im * Speicher * eines ssh-Agenten bekommen. – pts

+1

Ich kümmere mich um die Schlüssel, die von anderen Hosts hinzugefügt wurden (durch Agent-Weiterleitung), und es ist nicht bequem, diese Hosts erneut zu verbinden, um die Dateien zu lesen. – pts

1

In meinem Fall löschte ich versehentlich den .ssh-Ordner, aber meine Schlüssel sind geladen. Aber da ich die von ssh-add nicht wiederherstellen kann, musste ich Dateiwiederherstellungssoftware verwenden.

+1

Als eine Alternative zur Wiederherstellung von Datenträgern, Sie können den Speicher eines laufenden Linux-Prozesses (z. B. * ssh-agent *) als root ablegen ('sudo cat/proc/$$/mem', aber fügen Sie die richtige Suche hinzu). Vermutlich ist Disk-Recovery-Software einfacher zu benutzen. – pts