Wie entferne ich die Passphrase für den SSH-Schlüssel, ohne einen neuen Schlüssel erstellen zu müssen?

1033

Ich habe beim Erstellen eines neuen SSH-Schlüssels auf meinem Laptop eine Passphrase festgelegt. Aber wie ich jetzt weiß, ist dies ziemlich schmerzhaft, wenn Sie versuchen, ( Git und SVN ) mehrmals in einer Stunde über SSH an einen entfernten Ort zu übertragen.

Eine Möglichkeit, die ich mir vorstellen kann, besteht darin, meine SSH-Schlüssel zu löschen und neue zu erstellen. Gibt es eine Möglichkeit, die Passphrase zu entfernen, während die gleichen Schlüssel beibehalten werden?

Btbytes
quelle
9
Ich denke, die strenge Antwort ist tatsächlich die Antwort von Torsten Marek. Der SSH-Agent-Trick ist vielleicht das, wonach Sie suchen, aber er ist eine Antwort auf eine andere Frage.
verspätet
1
Die Passphrase ist nicht nur ein Schlüssel zum Entsperren des privaten SSH-Schlüssels, sondern Teil des Verschlüsselungsmechanismus. Ein Teil ist Ihr SSH-Schlüssel, der andere - die manuell eingegebene Passphrase. Nur wenn beide Teile korrekt sind, ist der daraus generierte zusammengesetzte Schlüssel gültig. Eine andere Passphrase entspricht also einem anderen SSH-Schlüssel (und keine Passphrase ist ein Sonderfall der "anderen Passphrase").
Paul
97
Das Schließen solcher Fragen ist wie das Diskutieren, ob Nebenwirkungen in Programmiersprachen zulässig sein sollten, weil sie "rein" sind oder nicht. Puristen laufen immer Amok, während die anderen sich nicht darum kümmern, weil es eine hilfreiche Funktion ist und das Leben leichter macht. ssh wird benötigt, auch wenn es nicht streng programmierbezogen ist ... schließen Sie solche Fragen nicht. : |
Sjas

Antworten:

1933

Kurze Antwort:

$ ssh-keygen -p

Dadurch werden Sie aufgefordert, den Speicherort der Schlüsseldatei, die alte Passphrase und die neue Passphrase einzugeben (die leer bleiben kann, um keine Passphrase zu haben).


Wenn Sie alles in einer Zeile ohne Eingabeaufforderung ausführen möchten, tun Sie Folgendes:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Wichtig: Beachten Sie, dass bei der Ausführung von Befehlen diese normalerweise in Ihrer ~/.bash_historyDatei (oder ähnlichem) im Klartext protokolliert werden, einschließlich aller angegebenen Argumente (dh der Passphrasen in diesem Fall). Es wird daher empfohlen, die erste Option zu verwenden, sofern Sie keinen bestimmten Grund haben, etwas anderes zu tun.

Beachten Sie jedoch, dass Sie weiterhin verwenden können, -f keyfileohne -Pnoch angeben zu müssen -N, und dass die Schlüsseldatei standardmäßig verwendet wird ~/.ssh/id_rsa, sodass sie in vielen Fällen nicht einmal benötigt wird.

Möglicherweise möchten Sie ssh-agent verwenden, der die Passphrase für einige Zeit zwischenspeichern kann. Die neuesten Versionen von gpg-agent unterstützen auch das von ssh-agent verwendete Protokoll.

Torsten Marek
quelle
464
Um es explizit zu sagen: Sie können einfach ssh-keygen -pin einem Terminal ausgeführt werden. Sie werden dann aufgefordert, eine Schlüsseldatei (standardmäßig die richtige Datei für mich ~/.ssh/id_rsa), die alte Passphrase (geben Sie ein, was Sie jetzt haben) und die neue Passphrase (nichts eingeben) einzugeben.
Henrik N
34
Ex. :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
Fedir RYKHTIK
24
-1, damit der Benutzer sein Passwort in das Terminal eingibt und es über zugänglich macht ~/.bash_history. Es ist besser zu tippen:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
Betoharres
5
Ihr solltet beachten, dass, wenn ihr den Befehl in die Shell eingibt, ein (weißer) Bereich gestartet wird, dieser Befehl nicht im ~/.bash_hstoryIe aufgezeichnet wird . Verwenden Sie `ssh-keygen -p -P oldpassphrase -N" "-f ~ / .ssh / id_rsa` und es geht Ihnen gut (es sei denn, Sie haben dort einen anderen Keylogger). Sie könnten auch die Aufzeichnung aus der Geschichte loswerden ..
Riesige
14
Es kann sinnvoll sein, eine Zeile hinzuzufügen, die besagt, dass dadurch die vorhandene Datei überschrieben wird und nicht nach einem neuen Speicherort gefragt wird.
Lars Francke
46

$ ssh-keygen -p arbeitete für mich

Geöffnete Git Bash. Eingefügt:$ ssh-keygen -p

Drücken Sie die Eingabetaste als Standardspeicherort.

Geben Sie die alte Passphrase ein

Neue Passphrase eingeben - BLANK

Bestätigen Sie die neue Passphrase - BLANK

BOOM der Schmerz, Passphrase für Git Push einzugeben, war weg.

Vielen Dank!

Karan
quelle
Wenn Sie die Eingabetaste $ ssh-keygen -pdrücken und sich Ihr Schlüssel nicht am Standardspeicherort befindet (z. B. /Users/yourname/.ssh/id_rsa), können Sie auf /Users/yourname/.ssh/yourkeyAufforderung eine
Eingabe vornehmen
37

Möglicherweise möchten Sie Ihrem .bash_profile (oder einem gleichwertigen) Folgendes hinzufügen, wodurch ssh-agent bei der Anmeldung gestartet wird.

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

Auf einigen Linux-Distributionen (Ubuntu, Debian) können Sie Folgendes verwenden:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

Dadurch wird die generierte ID auf einen Remotecomputer kopiert und dem Remote-Schlüsselbund hinzugefügt.

Hier und hier können Sie mehr lesen .

mlambie
quelle
7
Starten moderne Distributionen einen SSH-Agenten nicht sofort?
Troels Arvin
In einigen Linux-Distributionen (Ubuntu, Debian) können Sie Folgendes verwenden: ssh-copy-id -i ~ / .ssh / id_dsa.pub Benutzername @ Host Vorausgesetzt, Sie haben natürlich Zugriff auf diese Weise. Und obwohl es aus dem Jahr 2008 stammt, sollte es möglicherweise so bearbeitet werden, dass es auf id_rsa.pub verweist (ja, ich könnte es bearbeiten, aber ich fühle mich nicht wohl, wenn ich das mit den Werken anderer mache - und es gilt besonders für so etwas).
Pryftan
@TroelsArvin Ja. Aber es gibt Zeiten, in denen es getötet wird (obwohl mir der Umstand, auf den ich gestoßen bin, nicht in den Sinn kommt - es sei denn, X11 hat ein Problem und Sie müssen es neu starten ... das könnte eine solche Instanz sein). In diesem Fall müssen Sie es neu erstellen.
Pryftan
8

Um die Passphrase zu ändern oder zu entfernen, finde ich es oft am einfachsten, nur die Flags pund zu übergeben und fmich dann vom System zur Eingabe der Passphrasen auffordern zu lassen:

ssh-keygen -p -f <name-of-private-key>

Zum Beispiel:

ssh-keygen -p -f id_rsa

Geben Sie ein leeres Passwort ein, wenn Sie die Passphrase entfernen möchten.

Ein Beispiellauf zum Entfernen oder Ändern eines Kennworts sieht ungefähr so ​​aus:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

Wenn Sie einem Schlüssel ohne Passphrase eine Passphrase hinzufügen, sieht der Lauf ungefähr so ​​aus:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.
ccalvert
quelle
3

Unter Windows können Sie mit PuttyGen die private Schlüsseldatei laden, die Passphrase entfernen und dann die vorhandene private Schlüsseldatei überschreiben.

Ajit Goel
quelle
2

Auf dem Mac können Sie die Passphrase für Ihren privaten SSH-Schlüssel in Ihrem Schlüsselbund speichern, wodurch die Verwendung transparent wird. Wenn Sie angemeldet sind, ist es verfügbar. Wenn Sie abgemeldet sind, kann Ihr Root-Benutzer es nicht verwenden. Das Entfernen der Passphrase ist eine schlechte Idee, da jeder mit der Datei sie verwenden kann.

ssh-keygen -K

Fügen Sie dies hinzu ~/.ssh/config

UseKeychain yes
bbaassssiiee
quelle