Wie kann man verhindern, dass ein ssh-Schlüssel, der zum Ausführen von git-Aktionen verwendet wird, nur einmal entschlüsselt wird, auch wenn nach und nach neue Terminals unter Windows geöffnet werden?

415
030

Linux

Auf meinem Linux-System entschlüssle ich jedes Mal, wenn ich das System boote, einen privaten SSH-Schlüssel. Nach dem Booten öffne ich ein Terminal und führe aus:

ssh-add ~/.ssh/id_rsa_some_key 

und ich bin bereit, git-Operationen auszuführen git clone <git-url>, git pull -aund so weiter. Wenn ich ein anderes Terminal öffne und solche Befehle erneut erteile, wird keine Eingabeaufforderung angezeigt, in der Sie zur Eingabe des Kennworts des verschlüsselten ssh-Schlüssels aufgefordert werden. Zusammenfassend muss ich auf meinem Linux-System das Passwort nur einmal eingeben.

Windows

Auf meiner Arbeit habe ich ein Windows-System. Nach dem Booten öffne ich git-bash und gebe Folgendes aus :

eval $(ssh-agent) 

und ssh-add ~/.ssh/private_keygeben Sie das Passwort und gibt git Befehle, die die Lage ist, mit der git - Repository zu kommunizieren. Wenn ich im Gegensatz zu meinem Linux-System ein neues git-bash öffne und git-Befehle ausgibt, wird eine Aufforderung angezeigt, in der Sie zur Eingabe des Kennworts aufgefordert werden. Zusammenfassend kann gesagt werden, dass, wenn der private Schlüssel in einem git-bash-Terminal entschlüsselt wurde, eine Interaktion mit dem git-Repository möglich ist. Wenn jedoch ein neues Terminal geöffnet wird, sollte der ssh-key erneut entschlüsselt werden.

Was habe ich versucht?

Ich habe versucht, Festzug zu verwenden. Dieses erste Problem ist, dass die id_rsa nicht geeignet war. Ein neuer Schlüssel musste mit puttygen erstellt werden, aber es stellte sich heraus, dass es nicht möglich ist, die ssh git-URL zu verwenden, die mit git @ beginnt. Es musste durch die https-URL ersetzt werden, aber das ist nicht das, was ich will.

Welche Antwort ziehe ich vor?

Ich bevorzuge eine Antwort, die die folgenden Kriterien erfüllt:

  1. Die Ssh-Taste muss einmal entschlüsselt werden, wenn das Windows-System gestartet wurde und ein Terminal geöffnet ist, um git-Aktionen auszuführen
  2. Wenn ein neues Terminal geöffnet wird, kann man weiterhin mit dem git-Repository interagieren, dh es erscheint keine Aufforderung, die das Passwort eingeben soll.
  3. Ich bin nicht git-bash gewidmet. Wenn sich unter Windows ein anderes Terminal befindet, das den ersten beiden Kriterien entspricht, ist es für mich in Ordnung.
1

1 Antwort auf die Frage

1
telcoM

Der Befehl

eval $(ssh-agent) 

Startet den SSH-Agentenprozess (entspricht Pageant) und erstellt normalerweise zwei Umgebungsvariablen: SSH_AUTH_SOCK und SSH_AGENT_PID (zumindest unter Linux wissen Sie nicht, ob Windows git-bash hier einen Unterschied macht; wahrscheinlich nicht).

Wenn die Variable SSH_AUTH_SOCK gesetzt ist und auf einen gültigen Authentifizierungs-Agent-Socket verweist, kann jeder Prozess, der die Variable lesen kann, diese verwenden. Sie brauchen also nur einen Weg, um den Wert dieser Variablen von einer git-bash-Sitzung zu einer anderen zu verbreiten. Die Variable SSH_AGENT_PID ist nur eine Bequemlichkeit, damit der Agent bei Bedarf leicht beendet werden kann.

Wenn Sie diese Umgebungsvariablen (oder auch nur SSH_AUTH_SOCK) in einer Datei speichern können, damit Ihre nachfolgenden git-bash-Fenster sie lesen können, können Sie sie folgendermaßen skripieren:

Immer wenn ein neuer git-bash gestartet wird (dh mit dem .bashrcSkript oder dessen git-bash-Äquivalent)

  • Überprüfen Sie, ob die Umgebungsvariablendatei des SSH-Agenten vorhanden ist
  • Wenn die Datei existiert:
    • Lies es
    • Wenn der in der Datei aufgeführte Agent-Socket (und optional der Prozess) noch vorhanden ist, verwenden Sie die Variablen in der aktuellen Sitzung so wie sie sind
  • else (dh wenn die Datei nicht vorhanden war oder ihre Informationen veraltet waren):
    • Lauf eval $(ssh-agent)
    • Erstellen Sie eine neue Umgebungsvariablendatei für den SSH-Agenten
  • erledigt!

Möglicherweise müssen Sie auch die SSH-git-URL in vollständiger Form eingeben, d. H. git@server.name/project.gitSie sollten sie einfach wie folgt eingeben :

ssh://git@server.name/project.git 

Technisch gesehen ist das Formular ohne ssh://Präfix nur eine kurze Hand, die bequemer in der Befehlszeile eingegeben werden kann.