Warum kann sich git nicht an meine Passphrase unter Windows erinnern?

144

Ich habe gerade angefangen, Git zu verwenden, und ich kann es nicht dazu bringen, mich an meine Passphrase zu erinnern. Ich verwende cmd.exe erhöht und mein Git-Host ist Github und ich habe einen SSH-Schlüssel wie diesen Leitfaden auf Github erstellt

aber ich bekomme immer noch

*\subnus.mvc>git push origin master
Enter passphrase for key '/c/Users/Subnus/.ssh/id_rsa':
Nesizer
quelle
Ich habe msysgit selbst nicht verwendet, aber der Pageant- Authentifizierungsagent kann hilfreich sein.
Cebjyre
1
Ich habe alles versucht und dann fand ich das, was funktionierte.
Blake Niemyjski
1
Windows 10 wird seit einiger Zeit mit OpenSSH ausgeliefert. Aktivieren Sie den ssh-agent-Dienst, fügen Sie Ihren Schlüssel mit ssh-add zum ssh-Speicher hinzu und legen Sie ihn GIT_SSHin Ihrer Umgebung fest (falls erforderlich). Git / ssh speichert Ihre Passphrase über ssh-agent. Siehe meine Antwort unten für detailliertere Anweisungen.
d3r3kk
1
2019, gerade installiert git auf Windows 10 und git fragt nach dem Passwort einmal , und erinnert sich.
Jean-François Fabre
@ Jean-FrançoisFabre Möglicherweise verwenden Sie OpenSSL nicht.
RoadRunner

Antworten:

206

Mir ist klar, dass diese Frage zwei Jahre alt ist, aber ich hatte das gleiche Problem und mehrere Antworten hier haben die Frage für mich nicht vollständig beantwortet. Hier finden Sie zwei schrittweise Lösungen, je nachdem, ob Sie TortoiseGit zusätzlich zu msysgit verwenden oder nicht.

Erste Lösung Nimmt Windows, msysgit und PuTTY an.

  1. Installieren Sie msysgit und PuTTY wie angegeben.
  2. (Optional) Fügen Sie Ihrem Pfad PuTTY hinzu. (Wenn Sie dies nicht tun, muss allen Verweisen auf PuTTY-Befehle unten der vollständige Pfad zur entsprechenden ausführbaren Datei vorangestellt werden.)
  3. Wenn Sie dies noch nicht getan haben, generieren Sie einen Schlüssel-Hash gemäß den Anweisungen von GitHub oder den Anweisungen Ihres Git-Hosts.
  4. Wenn Sie dies noch nicht getan haben, konvertieren Sie Ihren Schlüssel zur Verwendung mit PuTTYs pageant.exe mit puttygen.exe . Anweisungen finden Sie in der Dokumentation von PuTTY, in diesem hilfreichen Handbuch und an mehreren anderen Stellen im Cyberspace.
  5. Führen Sie PuTTYs pageant.exe aus , öffnen Sie Ihre PPK-Datei ("Schlüssel hinzufügen") und geben Sie Ihre Passphrase für Ihren Schlüssel ein.
  6. Rufen Sie das Windows-Dialogfeld "Umgebungsvariablen" auf (Klicken Sie mit der rechten Maustaste auf "Computer", klicken Sie auf "Eigenschaften", klicken Sie auf "Erweiterte Systemeinstellungen" oder auf die Registerkarte "Erweitert", klicken Sie auf "Umgebungsvariablen"). Fügen Sie die folgende Umgebungsvariable hinzu:

    GIT_SSH = C: \ full \ path \ to \ plink.exe

    Ersetzen Sie "C: \ full \ path \ to" durch den vollständigen Installationspfad zu PuTTY, wo sich plink.exe befindet. Es ist wahrscheinlich am besten, es dem Abschnitt "Benutzervariablen" hinzuzufügen. Stellen Sie außerdem sicher, dass der Pfad, den Sie für plink.exe verwenden, mit dem Pfad übereinstimmt, den Sie für Pageant (pageant.exe) verwenden. In einigen Fällen haben Sie möglicherweise mehrere Installationen von PuTTY, da es möglicherweise zusammen mit anderen Anwendungen installiert wird. Die Verwendung von plink.exe aus einer Installation und pageant.exe aus einer anderen Installation führt wahrscheinlich zu Problemen.

  7. Öffnen Sie eine Eingabeaufforderung.

  8. Wenn Sie versuchen, eine Verbindung zu einem auf Github.com gehosteten Git-Repository herzustellen, führen Sie den folgenden Befehl aus:

    plink.exe [email protected]

    Wenn das Git-Repository, zu dem Sie eine Verbindung herstellen möchten, an einem anderen Ort gehostet wird, ersetzen Sie [email protected] durch einen geeigneten Benutzernamen und eine URL. (Angenommen, Github) Sie sollten informiert werden, dass der Hostschlüssel des Servers nicht zwischengespeichert ist, und gefragt werden, ob Sie ihm vertrauen. Antworte mit einem y . Dadurch wird der Hostschlüssel des Servers zur Liste der bekannten Hosts von PuTTY hinzugefügt. Ohne diesen Schritt funktionieren Git-Befehle nicht richtig. Nach dem Drücken der Eingabetaste informiert Github Sie darüber, dass Github keinen Shell-Zugriff bietet. Das ist in Ordnung ... wir brauchen es nicht. (Wenn Sie eine Verbindung zu einem anderen Host herstellen und dadurch Shell-Zugriff erhalten, ist es wahrscheinlich am besten, den Link zu beenden, ohne etwas anderes zu tun.)

  9. Alles erledigt! Git-Befehle sollten jetzt über die Befehlszeile funktionieren. Möglicherweise möchten Sie, dass pageant.exe Ihre PPK-Datei beim Booten automatisch lädt , je nachdem, wie oft Sie sie benötigen.

Zweite Lösung Nimmt Windows, msysgit und TortoiseGit an.

TortoiseGit enthält ausführbare PuTTY-Dateien und eine speziell modifizierte Version von plink (TortoisePlink.exe), die die Arbeit erleichtert.

  1. Installieren Sie msysgit und TortoiseGit wie angegeben.
  2. Wenn Sie dies noch nicht getan haben, generieren Sie einen Schlüssel-Hash gemäß den Anweisungen von GitHub oder den Anweisungen Ihres Git-Hosts.
  3. Wenn Sie dies noch nicht getan haben, konvertieren Sie Ihren Schlüssel für die Verwendung mit TortoiseGits pageant.exe mithilfe von TortoiseGits puttygen.exe . Anweisungen finden Sie in der Dokumentation von PuTTY, in der hilfreichen Anleitung, auf die in der ersten Lösung verwiesen wird, und an mehreren anderen Stellen im Cyberspace.
  4. Führen Sie die pageant.exe von TortoiseGit aus , öffnen Sie Ihre PPK-Datei ("Schlüssel hinzufügen") und geben Sie Ihre Passphrase für Ihren Schlüssel ein.
  5. Rufen Sie das Windows-Dialogfeld "Umgebungsvariablen" auf (Klicken Sie mit der rechten Maustaste auf "Computer", klicken Sie auf "Eigenschaften", klicken Sie auf "Erweiterte Systemeinstellungen" oder auf die Registerkarte "Erweitert", klicken Sie auf "Umgebungsvariablen"). Fügen Sie die folgende Umgebungsvariable hinzu:

    GIT_SSH = C: \ full \ path \ to \ TortoisePlink.exe

    Ersetzen Sie "C: \ full \ path \ to" durch den vollständigen Installationspfad zu TortoiseGit, wo sich TortoisePlink.exe befindet. Es ist wahrscheinlich am besten, es dem Abschnitt "Benutzervariablen" hinzuzufügen. Stellen Sie außerdem sicher, dass der Pfad, den Sie zu TortoisePlink.exe verwenden, mit dem Pfad übereinstimmt, den Sie für Pageant (pageant.exe) verwenden. In einigen Fällen haben Sie möglicherweise mehrere Installationen von PuTTY, da es möglicherweise zusammen mit anderen Anwendungen installiert wird. Die Verwendung von TortoisePlink.exe aus der TortoiseGit-Installation und pageant.exe aus einer anderen Installation einer anderen Anwendung (oder aus einer eigenständigen PuTTY-Installation) führt wahrscheinlich zu Problemen.

  6. Alles erledigt! Git-Befehle sollten jetzt über die Befehlszeile funktionieren. Wenn Sie zum ersten Mal versuchen, eine Verbindung zu Ihrem Git-Repository herzustellen, werden Sie wahrscheinlich darüber informiert, dass der Hostschlüssel des Servers nicht zwischengespeichert ist, und gefragt, ob Sie dem Server vertrauen. Klicken Sie auf "Ja". (Dies ist TortoisePlink.exe in Aktion.)

    Möglicherweise möchten Sie, dass pageant.exe Ihre PPK-Datei beim Booten automatisch lädt , je nachdem, wie oft Sie sie benötigen.

Dritte Lösung Nimmt Fenster, msysgit und native Eingabeaufforderung an.

  1. Installieren Sie msysgit
  2. Stellen Sie sicher, dass git an der MS-DOS-Eingabeaufforderung verwendet werden kann
  3. Lauf start-ssh-agent
  4. Geben Sie SSH-Passphrasen ein
  5. Alles erledigt! Git-Befehle sollten jetzt in der nativen Eingabeaufforderung funktionieren.
Matt Clarkson
quelle
3
Wenn Sie sowohl GitExtensions als auch TortoiseGit haben, von denen jede eine eigene Version von Putty hat, stellen Sie sicher, dass Sie die Umgebungsvariable GIT_SSH auf den Pfad des Plinks für den Festzug setzen, den Sie tatsächlich verwenden.
Shovavnik
15
Nur für den Fall, dass jemand anderes auf diesen dummen Fehler stößt: Stellen Sie sicher, dass Sie das SSH-Remote-URL-Format (git @ host: accountname / reponame.git) und nicht die HTTPS-URL verwenden, da Sie sonst weiterhin nach diesem Kennwort gefragt werden ...
Dain
Wenn ich plink.exe [email protected] starte, erhalte ich "FATAL ERROR: Server unerwartet geschlossene Netzwerkverbindung"
Brett
4
Hinweis: Methode drei wurde in msysgit übertragen, sodass Sie einfach start-ssh-agentdie Befehlszeile eingeben können , um Ihre SSH-Passphrase zu speichern.
Matt Clarkson
6
Die dritte Lösung funktioniert nur, bis die Eingabeaufforderung geschlossen wird, und nur für diese Eingabeaufforderung. Alle anderen CMDs fragen weiterhin nach einer Passphrase. Auch alle anderen Clients (VS, VS Code) können nicht mit Remote Git kommunizieren.
Dima
21

Jedes Mal, wenn ich einen neuen Desktop einrichte, vergesse ich diese Anweisungen, daher füge ich hier eine weitere Antwort hinzu, da ich gleich oft darauf stoße!


Schnelle Schritte für ungeduldige Benutzer wie mich

  1. Aktivieren Sie den OpenSSH Authentication AgentDienst und starten Sie ihn automatisch.
  2. Fügen Sie dem Agenten ssh-addin der Befehlszeile Ihren SSH-Schlüssel hinzu.
  3. Testen Sie die Git-Integration. Wenn Sie weiterhin nach Ihrer Passphrase gefragt werden, fahren Sie fort.
  4. Fügen Sie die Umgebungsvariable $ENV:GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exezu Ihrer Sitzung oder dauerhaft zu Ihrer Benutzerumgebung hinzu.

Detaillierte Schritte: Übersicht

Windows wird seit einiger Zeit mit OpenSSH ausgeliefert. Es enthält alle notwendigen Bits, damit ssh neben Git funktioniert, aber es scheint immer noch etwas TLC zu benötigen, bevor es 100% nahtlos funktioniert. Hier sind die Schritte, die ich ab Windows Version 10.0.18362.449 mit Erfolg ausgeführt habe (Sie können Ihre Windows 10-Version anzeigen, indem Sie eine cmd.exe-Shell öffnen und eingeben ver).

Ich gehe hier davon aus, dass Sie bereits Ihr SSH-Schlüssel-Setup haben und sich unter befinden ~/.ssh/id_rsa

Aktivieren Sie den SSH-Agent-Dienst auf Ihrer Windows 10-Box.

  1. Start-> Geben Sie 'Services' ein und klicken Sie auf die angezeigte Services-App.
  2. Finden Sie den OpenSSH Authentication AgentDienst in der Liste.
  3. Klicken Sie mit der rechten Maustaste auf den OpenSSH Authentication AgentDienst und wählen Sie "Eigenschaften".
  4. Ändern Sie das Startup type:in Automatic.
  5. Klicken Sie auf die StartSchaltfläche, um den Servicestatus in zu ändernRunning .
  6. Schließen Sie den Dialog, indem Sie auf klicken OK, und schließen Sie die Dienst-App.

Fügen Sie Ihren Schlüssel zum hinzu ssh-agent

  1. Öffnen Sie Ihre bevorzugte Shell (in diesem Beispiel wird Windows Powershell verwendet, gilt auch für Powershell Core) .
  2. Fügen Sie Ihren SSH-Schlüssel zu ssh-agent: ssh-add (Sie können den Pfad zu Ihrem Schlüssel als erstes Argument hinzufügen, wenn er vom Standard abweicht) .
  3. Geben Sie Ihre Passphrase ein, wenn Sie dazu aufgefordert werden.

Versuchen Sie Git + SSH

  1. Öffne deine Shell (wieder benutze ich Powershell) und klone ein Repo.git clone [email protected]:octocat/Spoon-Knife
  2. Wenn diese Eingabeaufforderung angezeigt wird, fahren Sie mit dem nächsten Abschnitt fort:
Enter passphrase for key '/c/Users/your_user_name/.ssh/id_rsa':

Legen Sie Ihre GIT_SSHUmgebungsvariable fest

In jeder Sitzung können Sie einfach diese Umgebungsvariable festlegen, und die Eingabeaufforderung für Ihre Passphrase wird nicht mehr angezeigt, und ssh verwendet die ssh-agentin Ihrem Namen. Alternativ können Sie Ihre Passphrase dauerhaft in der Umgebung Ihres Benutzers festlegen.

So stellen Sie GIT_SSHnur die aktuelle Shell ein:

  1. Öffnen Sie Ihre bevorzugte Hülle. (Powershell für mich)
  2. Setzen Sie die Umgebungsvariable GIT_SSH auf das entsprechende ssh.exe:$Env:GIT_SSH=$((Get-Command -Name ssh).Source)
  3. Wiederholen Sie die Schritte unter Try Git + SSH oben.

GIT_SSHDauerhaft einstellen

  1. Öffnen Sie den Datei-Explorer. Start-> Geben Sie 'Datei-Explorer' ein und klicken Sie in der Liste darauf.
  2. Klicken Sie mit der rechten Maustaste auf "Dieser PC" und klicken Sie auf "Eigenschaften".
  3. Klicken Sie auf "Erweiterte Systemeinstellungen".
  4. Klicken Sie auf die Schaltfläche 'Umgebungsvariablen ...'.
  5. Klicken Sie unter 'Benutzervariablen für Ihren_Benutzernamen' auf Neu ...
  6. Setzen Sie das Variable name:Feld auf GIT_SSH
  7. Setzen Sie das Variable value:Feld (normalerweise C:\Windows\System32\OpenSSH\ssh.exe) auf path-to-ssh.exe .
  8. Klicken Sie auf OK, um das Dialogfeld Neue Benutzervariable zu schließen.
  9. Klicken Sie auf OK, um das Dialogfeld Umgebungsvariablen zu schließen.
  10. Wiederholen Sie die Schritte unter Try Git + SSH oben.

Beachten Sie, dass sich dies wahrscheinlich mit neuen Schritten / Verfahren ändern wird, wenn Windows 10 fortschreitet und ich mehr erfahre. Ich werde versuchen, dies auf dem neuesten Stand zu halten, ich freue mich auf Feedback in den Kommentaren.

d3r3kk
quelle
3
Dies ist die vollständigste Antwort zum 31.01.2020, zumindest für Windows. PUTTY oder ähnliches muss nicht installiert werden.
Jake
Einverstanden. Es scheint, dass die eingebaute Unterstützung endlich da ist.
Eron Lloyd
Legende! Dies löste mein Problem. Ich habe eine Weile nach einer Lösung gesucht, verschiedene Dinge ausprobiert und dies ist zweifellos die vollständigste Lösung für dieses Problem
Collin
Vielen Dank für eine nette Antwort, die mir höchstwahrscheinlich ein paar Stunden Zeit erspart hat. +1
Wütend 84
20

Weitere Informationen finden Sie auf dieser Seite: http://help.github.com/working-with-key-passphrases/

Franz
quelle
Genau das, was ich für die Verwendung der msysgitShell brauchte .
Arthurakay
1
Arbeitete für mich bei der Verwendung der Git Bash Desktop App. Ich habe notepad ~/.profileden Inhalt dieses Links verwendet und kopiert, den Git Bash neu gestartet, mein Passwort eingegeben, davon profitiert ...
Daryn
Ich folgte dem Abschnitt "Automatisches Starten von ssh-agent unter Git für Windows" (mit git 2.x unter Win 10), fragte mich aber immer wieder nach dem Passwort. Die folgende erste Lösung (Kitt) aus der akzeptierten Antwort hat dies für mich behoben.
Jakub.g
20

Wenn Sie Git Bash unter Windows verwenden , können Sie Folgendes ausführen:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

Im zweiten Befehl wird nach der Passphrase gefragt, und das war's. Bei jeder zusätzlichen Aktion, die Sie ausführen müssen (für die einmal eine Passphrase erforderlich war), werden Sie nicht nach der Passphrase gefragt (siehe ein Beispiel im folgenden Screenshot):

Hinzufügen einer Passphrase in Git Bash unter Windows

Guy Avraham
quelle
2
Dies funktioniert auch im Ubuntu-Subsystem unter Windows 10.
Treffen
1
Beachten Sie, dass Sie ~ / .ssh / * _ rsa durch den Pfad der * .pem-Datei
ersetzen können
13

Eine zusätzliche Lösung 5 Jahre, 8 Monate und 6 Tage nach der Veröffentlichung der Frage wäre keine schlechte Idee.

HINWEIS: Angenommen, Sie verwenden einen Windows-Computer.

  1. Laden Sie den git-credential-winstore herunter .
  2. Starte es! Wenn Sie GIT in Ihrer PATHUmgebungsvariablen haben, sollte es einfach funktionieren. Wenn nicht, renne git-credential-winstore -i C:\Path\To\Git.exe.

Wenn Sie das nächste Mal versuchen, ein Commit für ein Repository festzulegen, werden Sie aufgefordert, Ihre Anmeldeinformationen einzugeben. Das sollte es sein. Sie werden nicht mehr nach Ihren Anmeldeinformationen gefragt, bis Sie Ihr Passwort ändern.


Nur zu Ihrer Kenntnis ... Ihre Anmeldeinformationen werden im Windows Credential Store gespeichert

Wo speichern Sie meine Anmeldeinformationen?

Diese App verwendet nur den vorhandenen Windows-Anmeldeinformationsspeicher, um Ihre Anmeldeinformationen zu speichern. Sie können die gespeicherten Anmeldeinformationen anzeigen, indem Sie in der Systemsteuerung> Benutzerkonten> Anmeldeinformations-Manager "Windows-Anmeldeinformationen" auswählen. Die Einträge, die mit "git:" beginnen, stammen aus dem git-credential-winstore.

Alex Essilfie
quelle
8
Diese Lösung scheint nicht mit SSH-Repos zu funktionieren, sondern nur mit HTTPS. / Angryface
JasonCoder
8

Wenn Sie ein Kennwort für Ihre Schlüsseldatei festlegen, müssen Sie dieses Kennwort bei der Verbindung immer eingeben. Wenn Sie einen kennwortlosen Schlüssel erstellen, müssen Sie ihn nicht jedes Mal eingeben. Jeder Benutzer mit Zugriff auf Ihre Schlüsseldatei kann jetzt eine Verbindung zu Ihrem Github-Konto herstellen.

ssh-agent kann auch funktionieren. Versuchen Sie, das auszuführen, und prüfen Sie, ob es sich an Ihre Passphrase erinnert.

Grant Limberg
quelle
Laufen ssh-keygen -psollte es dem OP ermöglichen, keine Passphrase zu setzen
Luchosrock
Fordert immer noch zur Eingabe des Passworts auf.
Versedi
7

[edit - die Frage falsch verstanden, dies ist eine Antwort auf ein verwandtes Problem. umformulierte Version für die Nachwelt verlassen]

Mein Fall war, dass ich versucht habe, auf ein Repo zuzugreifen, das auf einem unserer Server gehostet wurde. Wann immer ich versuchte, einen Push auszuführen, fragte mich git nach meinem Passwort (nb - Passwort, nicht die Passphrase für meinen privaten Schlüssel).

Durch Hinzufügen meines öffentlichen Schlüssels zu den autorisierten Schlüsseln auf dem Server konnte ich kennwortfreie Pushs auf diesen Server erhalten. Und weil es keine Passphrase gab mein privater Schlüssel enthielt (was übrigens eine schlechte Praxis ist!), Musste ich überhaupt nichts eingeben.

Hier ist der Befehl zum Hinzufügen Ihres öffentlichen Schlüssels zu einem Server. Es wird davon ausgegangen, dass der Benutzer gitder Benutzer auf dem Server ist.

cat .ssh/id_rsa.pub | ssh git@GIT_MASTER_IP 'cat >> .ssh/authorized_keys'

Sie können dasselbe erreichen, indem Sie sich am Server anmelden und Ihren öffentlichen Schlüssel manuell an die Datei unter anhängen ~/.ssh/authorized_keys

hwjp
quelle
Könnten Sie dies in eine Beschreibung umwandeln, die von jemandem verwendet werden kann, der keinen Zugriff auf eine Shell hat? Was sollten wir beispielsweise mit einem Editor oder ähnlichem in autorisierte_Tasten eingeben?
John Little
4

Mir ist klar, dass dies mehrere Jahre überfällig ist, aber ich bin auf diese Frage gestoßen, als ich versucht habe, eine Lösung dafür zu finden, und habe etwas gefunden, das für alle Kompetenzstufen geeignet ist, und dachte, ich würde es teilen.

GitHub bietet ein sehr hilfreiches Installationsprogramm, das alles schön und einfach macht: https://help.github.com/articles/caching-your-github-password-in-git/

roobeedeedada
quelle
Bitte beachten Sie, dass hierdurch Ihr GitHub- Passwort zwischengespeichert wird , keine GPG-Schlüssel-Passphrase.
Judge2020
4

Nehmen wir an, Sie möchten eine reine Git Bash- Lösung ohne TortoiseGit oder PuTTY verwenden. Außerdem möchten Sie Ihre Passphrasen nicht dauerhaft speichern, da dies fast so ist, als hätten Sie Ihren SSH-Schlüssel überhaupt ohne Passphrase generiert. Sie möchten jedoch weiterhin Caching verwenden.

Für Caching-Zwecke wird der ssh-agentProzess verwendet, der in der Git Bash-Distribution enthalten ist. Dieser Prozess wird nicht standardmäßig gestartet, daher muss er zuerst gestartet werden. Damit SSH-Schlüssel zwischengespeichert werden können, sollten sie diesem Prozess mit hinzugefügt werdenssh-add Befehl der Sie zur Eingabe der Passphrase eines Schlüssels auffordert und diese im Speicher speichert.

Nachteile anderer Lösungen:

  • Beim automatischen Starten ssh-agentwie in GitHubs Artikel wird beim Starten von Git Bash von Anfang an nach einer Passphrase gefragt, unabhängig davon, ob Sie in dieser Sitzung Ihren SSH-Schlüssel verwenden müssen oder nicht. Wenn Sie heute mit Ihrem lokalen Repo arbeiten, möchten Sie wahrscheinlich nur dann eine Passphrase bereitstellen, wenn dies wirklich erforderlich ist (z. B. bei der Interaktion mit einem Remote-Repo).
  • Wenn Sie Ihr ssh-agentLike in GitLabs Artikel mit starten, haben eval $(ssh-agent -s)Sie es wahrscheinlich satt, dies jedes Mal einzugeben. Möglicherweise haben Sie diese beiden Zeilen zu Ihrer .bashrcKonfiguration hinzugefügt, um sie automatisch zu starten. Die Nachteile sind die gleichen wie oben und ein zusätzlicher: Jedes Mal, wenn Sie ein neues Git Bash-Terminal starten, erhalten Sie einen zusätzlichen SSH-Agent-Prozess (das Bash-Skript von GitHub prüft, ob dieser Prozess bereits gestartet wurde).
  • Wie die beiden oben, aber besonders dann, wenn Sie separate SSH-Schlüssel für verschiedene Hosts haben, z. B. einen für GitHub und einen anderen für GitLab. Daher ist es ärgerlich und unpraktisch, alle auf einmal bereitzustellen.

Diese Lösung ist also für diejenigen gedacht, die sich fragen, wie Git Bash nur einmal pro Windows-Sitzung und nur dann, wenn sie wirklich benötigt wird, nach einer Passphrase fragen kann. Es ähnelt dem Verhalten von Paßphrasen Management mit GnuPG Commits Auto-Unterzeichnung mit default-cache-ttl.

Konfigurieren von SSH, um bei Bedarf einmalig nach Passphrasen zu fragen, nur mit Git Bash

  1. Zuerst möchten wir das ssh-agentbeim Starten einer Git Bash-Shell automatisch starten . Wir werden dafür ein modifiziertes GitHub- Skript verwenden , da es prüft, ob der Prozess bereits gestartet wurde, aber wir möchten nicht, dass es ssh-addsofort Schlüssel gibt. Dieses Skript geht in Ihr ~/.bashrcoder ~/.profileoder ~/.bash_profile( ~ist das Home-Verzeichnis Ihres Benutzers wie C:\Users\Username- ausführen cd ~und dann pwdfür den Git Bash ausdrucken):

    ### Start ssh-agent
    
    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")  # use -t here for timeout
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
    fi
    
    unset env
  2. Bearbeiten oder erstellen Sie nun eine ~/.ssh/configDatei und fügen Sie eine AddKeysToAgentOption für jede Host-Zeilengruppe hinzu, für die das Caching aktiviert werden soll (Sie können sie auch global aktivieren, indem Sie die Direktive am Anfang der Datei vor allen Host-Deklarationen platzieren):

    # GitHub.com
    Host github.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_github
      AddKeysToAgent yes
    
    # GitLab.com
    Host gitlab.com
      Preferredauthentications publickey
      IdentityFile ~/.ssh/id_ed25519_gitlab
      AddKeysToAgent yes

    Von der Manpage ssh config : Wenn diese Option auf yes gesetzt ist und ein Schlüssel aus einer Datei geladen wird, werden der Schlüssel und seine Passphrase dem Agenten mit der Standardlebensdauer hinzugefügt, wie von ssh-add (1).

Die maximale Standardlebensdauer beträgt für immer oder bis der ssh-agentProzess beendet wird (entweder manuell vom Task-Manager oder wenn Ihr PC heruntergefahren wird). Wenn Sie ein endliches Timeout verwenden möchten, können Sie es mit dem -tParameter von ssh-agent festlegen . Ändern Sie die Zeile im Bash-Skript ab dem ersten Schritt oben, z. B. für eine 30-minütige Lebensdauer des Schlüsselcaches:

(umask 077; ssh-agent -t 30m >| "$env")

Sehen Sie hier für weitere Zeitformat - Qualifikation.

Nikolay Kotlyarov
quelle
3

Sie können eine .bashrcDatei im Home-Verzeichnis Ihres Benutzers erstellen C:/Users/youruserund dort ablegen:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Dieses Skript wird jedes Mal ausgeführt, nachdem bash ausgeführt wurde. Sie müssen das Passwort also nur einmal eingeben, wenn git-bashes gestartet wird!

Einige Versionen von Bash erfordern .bash_profilestattdessen eine Datei .bashrc, also nur für den Fall, dass geklont wird .bashrc:

copy .bashrc .bash_profile
Alexander Goncharov
quelle
1

kann versuchen, -k arg hinzuzufügen, wenn Sie dies tun;

ssh-add -k ~/.ssh/id_rsa
Tarikakyol
quelle