Wie kann verhindert werden, dass ein SSH-Schlüssel, der zum Ausführen von Git-Aktionen verwendet wird, auch beim anschließenden Öffnen neuer Terminals unter Windows nur einmal entschlüsselt wird?

Wie kann verhindert werden, dass ein SSH-Schlüssel, der zum Ausführen von Git-Aktionen verwendet wird, auch beim anschließenden Öffnen neuer Terminals unter Windows nur einmal entschlüsselt wird?

Linux

Auf meinem Linux-System entschlüssele ich bei jedem Systemstart einen privaten SSH-Schlüssel. Nach dem Systemstart öffne ich ein Terminal und gebe Folgendes ein:

ssh-add ~/.ssh/id_rsa_some_key

git clone <git-url>und ich bin bereit, Git-Operationen wie usw. auszuführen git pull -a. Wenn ich ein anderes Terminal öffne und solche Befehle erneut eingebe, wird keine Eingabeaufforderung angezeigt, in der ich nach dem Kennwort des verschlüsselten SSH-Schlüssels gefragt werde. Zusammenfassend muss ich auf meinem Linux-System das Kennwort nur einmal eingeben.

Windows

Auf meiner Arbeit habe ich ein Windows-System. Nach dem Booten öffne ichGit-Bashund Problem:

eval $(ssh-agent)

und ssh-add ~/.ssh/private_key, geben Sie das Passwort ein und geben Sie Git-Befehle ein, die mit dem Git-Repository kommunizieren können. Im Gegensatz zu meinem Linux-System erscheint, wenn ich ein neues Git-Bash öffne und Git-Befehle eingebe, eine Eingabeaufforderung, in der ich zur Eingabe des Passworts aufgefordert werde. Zusammenfassend lässt sich sagen, dass es möglich ist, mit dem Git-Repository zu interagieren, wenn der private Schlüssel in einem Git-Bash-Terminal entschlüsselt wurde, aber wenn ein neues Terminal geöffnet wird, sollte der SSH-Schlüssel erneut entschlüsselt werden.

Was habe ich versucht

Ich habe versucht, Pageant zu verwenden. Das erste Problem ist, dass die id_rsa nicht geeignet war. Mit Puttygen musste ein neuer Schlüssel erstellt werden, aber dann stellte sich heraus, dass es nicht möglich sein wird, die SSH-Git-URL zu verwenden, die mit git@ beginnt. Sie musste durch die https-URL ersetzt werden, aber das ist nicht das, was ich will.

Welche Antwort bevorzuge ich

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

  1. Der SSH-Schlüssel muss einmalig entschlüsselt werden, wenn das Windows-System gebootet wurde und ein Terminal geöffnet wird, um Git-Aktionen auszuführen
  2. Beim Öffnen eines neuen Terminals kann weiterhin mit dem Git-Repository interagiert werden, d. h. es wird keine Eingabeaufforderung zur Eingabe des Kennworts angezeigt.
  3. Ich bin kein Fan von Git-Bash. Wenn es unter Windows ein anderes Terminal gibt, das die ersten beiden Kriterien erfüllt, ist das für mich in Ordnung.

Antwort1

Der Befehl

eval $(ssh-agent)

startet den SSH-Agent-Prozess (entspricht Pageant) und erstellt normalerweise zwei Umgebungsvariablen: SSH_AUTH_SOCK und SSH_AGENT_PID (zumindest unter Linux, ich weiß nicht, ob Windows-Git-Bash hier einen Unterschied macht; wahrscheinlich nicht).

Wenn die Variable SSH_AUTH_SOCK gesetzt ist und auf einen gültigen Authentifizierungsagenten-Socket zeigt, kann jeder Prozess, der die Variable lesen kann, sie verwenden. Sie brauchen also nur eine Möglichkeit, den Wert dieser Variable von einer Git-Bash-Sitzung zur nächsten zu übertragen. Die Variable SSH_AGENT_PID ist nur eine Annehmlichkeit, damit der Agent bei Bedarf einfach beendet werden kann.

Wenn Sie diese Umgebungsvariablen (oder auch nur SSH_AUTH_SOCK) in einer Datei speichern können, sodass Ihre nachfolgenden Git-Bash-Fenster sie lesen können, können Sie ein Skript dafür folgendermaßen erstellen:

Immer wenn eine neue Git-Bash gestartet wird (also mit dem .bashrcSkript oder seinem 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 unverändert in Ihrer aktuellen Sitzung.
  • sonst (d. h. wenn die Datei nicht vorhanden war oder ihre Informationen veraltet waren):
    • laufeneval $(ssh-agent)
    • Erstellen Sie eine neue Umgebungsvariablendatei für den SSH-Agenten
  • Erledigt!

Außerdem müssen Sie möglicherweise die SSH-Git-URL vollständig eingeben, d. h. statt nur [email protected]/project.gitsollten Sie sie folgendermaßen eingeben:

ssh://[email protected]/project.git

Technisch gesehen ist die Form ohne ssh://Präfix lediglich eine Abkürzung, die sich bequemer in die Befehlszeile eingeben lässt.

verwandte Informationen