Wie füge ich einem privaten OpenSSH-Schlüssel, der ohne Kennwort generiert wurde, ein Kennwort hinzu?

212

Ich habe mit puttygen einen privaten OpenSSH-Schlüssel generiert (und ihn im OpenSSH-Format exportiert). Wie kann ich diesem vorhandenen Schlüssel ein Passwort zuweisen (ich weiß, wie man einen neuen Schlüssel mit einem Passwort generiert)?

Conrad
quelle
13
Wenn Sie diesen Kommentar sehen, markieren Sie bitte eine der Antworten als akzeptiert oder schreiben Sie einen Kommentar, in dem angegeben wird, was sie verpasst haben. Vielen Dank!
Benjamin Atkin
1
Hinzufügen ist dasselbe wie Ändern oder Entfernen: stackoverflow.com/questions/112396/… , mögliches Gleiches für Änderung: serverfault.com/questions/50775/…
Ciro Santilli 法轮功 冠状 病 六四 事件 2
Wenn Sie Bad passphraseeinen id_ed25519Schlüssel erhalten, das Kennwort jedoch korrekt ist, verwenden Sie wahrscheinlich eine niedrigere Ebene ssh-keygen, um ihn zu verwalten.
JWW

Antworten:

349

Versuchen Sie den Befehl ssh-keygen -p -f keyfile

Von der Manpage ssh-keygen

 -p      Requests changing the passphrase of a private key file instead of
         creating a new private key.  The program will prompt for the file
         containing the private key, for the old passphrase, and twice for
         the new passphrase.

 -f filename
         Specifies the filename of the key file.

Beispiel:

ssh-keygen -p -f ~/.ssh/id_rsa
Sigjuice
quelle
5
Für diejenigen, die wissen möchten, was -f ist: Es gibt die Eingabedatei an.
Neikos
4
//, @sigjuice, würdest du bitte ein Beispiel posten, wie $ ssh-keygen -p -f /Users/sigjuice/.ssh/id_rsa? Dies kann Menschen helfen, die nicht wissen, wie sie den Unterschied zwischen einem öffentlichen und einem privaten Schlüssel erkennen können, und ihnen helfen, ihre Füße schneller nass zu machen.
Nathan Basanese
Unter MacOS 10.14 wird die Datei aus irgendeinem Grund nicht mit dem Proc-Type: 4,ENCRYPTEDHeader formatiert , was mit einigen Anwendungen, die nach einer Passphrase suchen, nicht kompatibel ist. Nachdem Sie verschiedene Möglichkeiten ausprobiert haben, um es zum Laufen zu bringen, war es am einfachsten, dasselbe in einem Docker-Container unter Ubuntu zu tun und dann den Schlüssel zurück auf meinen Mac zu kopieren.
Ryanbrainard
38

Verwenden Sie die Option -p für ssh-keygen. Auf diese Weise können Sie das Kennwort ändern, anstatt einen neuen Schlüssel zu generieren.

Ändern Sie das Passwort wie in sigjuice gezeigt:

ssh-keygen -p -f ~/.ssh/id_rsa

Das erforderliche Passwort ist das neue Passwort. (Dies setzt voraus, dass Sie den öffentlichen Schlüssel ~/.ssh/id_rsa.pubzu Ihren autorisierten Schlüsseldateien hinzugefügt haben .) Test mit ssh:

ssh -i ~/.ssh/id_rsa localhost

Sie können mehrere Schlüssel mit unterschiedlichen Namen für unterschiedliche Zwecke verwenden.

BillThor
quelle
//, Würden Sie bitte ein Beispiel zeigen und wie Sie überprüfen können, ob die Option funktioniert hat, @BillThor?
Nathan Basanese
Ich verstehe nicht. Die Passphrase ist gesetzt, ich sehe, wenn ich versuche, sie erneut zu ändern. Aber wenn ich versuche, mich beim Remote-Server anzumelden, werden Sie nicht nach diesem Passwort gefragt. Warum?
Luka
1
Das ist gut. Es fragt einmal pro Sitzung :) Wusste das nicht.
Luka
Bedeutet dies, dass Sie sich ab- und wieder anmelden müssen? Das Schließen des Terminalfensters und das erneute Öffnen funktioniert bei mir nicht.
Simon H
Sie können eingeben ssh-add -D, um Ihre zwischengespeicherte Identität zu entfernen. Versuchen Sie dann erneut, eine Verbindung herzustellen, und Sie werden nach Ihrem Passwort gefragt. Verwenden ssh-add -lSie diese Option, um eine Liste Ihrer zwischengespeicherten Identitäten anzuzeigen.
Scott Nedderman
3

Sie können auch verwenden openssl:

openssl rsa -aes256 -in ~/.ssh/your_key -out ~/.ssh/your_key.enc
mv ~/.ssh/your_key.enc ~/.ssh/your_key
chmod 600 ~/.ssh/your_key

Siehe: https://security.stackexchange.com/a/59164/194668

sharez
quelle
Ich denke, ich werde den ssh-keygen Weg gehen;)
Michael P. Bazos
Vielen Dank, dass Sie eine openssl-Alternative für diese Aufgabe bereitgestellt haben.
Nadjib Mami