Git fragt mich immer wieder nach meiner SSH-Schlüssel-Passphrase

538

Ich habe Schlüssel wie im Github-Tutorial beschrieben erstellt, sie bei Github registriert und versucht, ssh-agent explizit zu verwenden. Git fragt mich jedoch weiterhin jedes Mal nach meiner Passphrase, wenn ich versuche, einen Pull oder Push auszuführen.

Was könnte die Ursache sein?

Rogach
quelle
Siehe auch
Jeff

Antworten:

1039

Sobald Sie den SSH-Agenten gestartet haben mit:

eval $(ssh-agent)
  1. Sie müssen Ihren privaten Schlüssel hinzufügen:

    ssh-add
    

    Dies wird Sie nur einmal nach Ihrer Passphrase fragen, und dann sollten Sie pushen dürfen, vorausgesetzt, Sie haben den öffentlichen Schlüssel auf Github hochgeladen.

  2. So speichern Sie den Schlüssel dauerhaft unter macOS:

    ssh-add -K  
    

    Dadurch bleibt es bestehen, nachdem Sie es geschlossen und erneut geöffnet haben, indem Sie es im Schlüsselbund des Benutzers speichern.

Roberto Bonvallet
quelle
16
Abmelden vom Server, SSH wieder anmelden, ausführen git pull, mich erneut zur Eingabe des Passworts auffordern.
Cyber8200
35
ssh-add -Kwird es beibehalten, nachdem Sie es geschlossen und wieder geöffnet haben, indem Sie es im Schlüsselbund des Benutzers speichern.
Kirk
72
@ Kirk ssh-add -Kgibt Folgendes:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
Sandeep C
13
Ich werde trotzdem zur Eingabe einer Passphrase aufgefordert.
IgorGanapolsky
21
-Kist apfelspezifisch. Siehe help.github.com/articles/…
bkdir
238

Dies ist mir nach dem Neustart seit dem Upgrade von OS X El Capitan (10.11) auf macOS Sierra (10.12) passiert. Die ssh-addLösung funktionierte vorübergehend, blieb jedoch bei einem weiteren Neustart nicht bestehen.

Die dauerhafte Lösung bestand darin, ~/.ssh/configdie UseKeychainOption zu bearbeiten (oder zu erstellen) und zu aktivieren .

Host *
    UseKeychain yes

Verwandte: macOS fragt immer wieder nach meiner SSH-Passphrase, seit ich auf Sierra aktualisiert habe

Kyle Clegg
quelle
1
arbeitete für mich danke ... ich hatte getan ... ssh-add -K /Users/***/.ssh/git/id_rsaaber es funktionierte immer noch nicht nach dem Neustart des Terminals ... danke.
Nawlbergs
2
Möchten Sie wissen, warum dies passiert? Lesen Sie den technischen Hinweis zu OpenSSH-Änderungen. Developer.apple.com/library/content/technotes/tn2449/…
samwize
62

Wenn Sie es versucht haben ssh-addund dennoch aufgefordert werden, Ihre Passphrase einzugeben, versuchen Sie es mit ssh-add -K. Dadurch wird Ihre Passphrase Ihrem Schlüsselbund hinzugefügt.

Update: Wenn Sie macOS Sierra verwenden, müssen Sie wahrscheinlich einen weiteren Schritt ausführen, da die oben genannten Schritte möglicherweise nicht mehr funktionieren. Fügen Sie Folgendes hinzu ~/.ssh/config:

Host *
  UseKeychain yes
Darryl Young
quelle
2
Fordert mich immer noch zur Eingabe einer Passphrase auf.
IgorGanapolsky
@IgorGanapolsky Verwenden Sie macOS Sierra? Wenn ja, lesen Sie, was ich gerade zur Antwort hinzugefügt habe. Ich hoffe das hilft.
Darryl Young
2
Ja, ich bin in Sierra. Hier ist jedoch die Zeile, die auch für mich funktioniert hat: AddKeysToAgent yes
IgorGanapolsky
1
Dies funktioniert auch mit BitBucket Cloud. Ich hatte Probleme mit GitKraken und dies löste meine Probleme.
Malachi
54

Ich würde folgendes versuchen:

  1. Starten Sie GitBash
  2. Bearbeiten Sie Ihre ~/.bashrcDatei
  3. Fügen Sie der Datei die folgenden Zeilen hinzu

SSH_ENV=$HOME/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  1. Speichern und schließen Sie die Datei
  2. Schließen Sie GitBash
  3. Öffnen Sie GitBash erneut
  4. Geben Sie Ihre Passphrase ein
Roland
quelle
4
Zum späteren Nachschlagen funktioniert dies auch mit zsh. Fügen Sie dies einfach zu.zshrc
Arda
2
Ich glaube, dies setzt voraus, dass Ihre Schlüsseldatei aufgerufen wird id_rsa. Wenn Sie einen benutzerdefinierten Namen haben, sollten Sie z. /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen
2
Können Sie erklären, was mit diesem Skript passiert?
LeeR
2
@Lee startet den ssh-agent, wenn er nicht bereits ausgeführt wird. Dies stellt sicher, dass Sie nicht bei jedem Push (mehr oder weniger) nach der ssh-Passphrase gefragt werden.
Roland
Dies führt nur ssh-agent aus und fügt den Schlüssel bei jeder Anmeldung hinzu. Sie müssen bei jeder Anmeldung noch ein Passwort eingeben. Wenn Sie beispielsweise Skripte haben, die GIT-Befehle ausführen und ausführen, ist dies leider überhaupt nicht sinnvoll.
Trainoasis
27

Versuchen Sie, dies zu Ihrer ~ / .ssh / config hinzuzufügen :

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

... vorausgesetzt, Ihr privater Schlüssel heißt id_rsa

IgorGanapolsky
quelle
11
UseKeychain Ja ist nur gültig für Mac
Oz123
3
@ Oz123 was ist das Äquivalent für Windows
IgorGanapolsky
@ Oz123 Ich denke, das Äquivalent unter Windows ist AddKeysToAgent Ja, überprüfen Sie diese Antwort stackoverflow.com/questions/52423626/…
fedeteka
6

Ich hatte ein ähnliches Problem, aber die anderen Antworten haben mein Problem nicht behoben. Ich dachte, ich würde weitermachen und dies posten, nur für den Fall, dass jemand anderes ein verrücktes Setup wie ich hat.

Es stellte sich heraus, dass ich mehrere Schlüssel hatte und Git zuerst den falschen verwendete. Es würde mich zur Eingabe meiner Passphrase auffordern und ich würde sie eingeben, dann würde Git einen anderen Schlüssel verwenden, der funktionieren würde (für den ich die Passphrase nicht eingeben musste).

Ich habe gerade den Schlüssel gelöscht, mit dem ich zur Eingabe einer Passphrase aufgefordert wurde, und jetzt funktioniert es!

11101101b
quelle
5

Es hört sich so an, als hätten Sie möglicherweise Probleme mit dem SSH-Agent selbst. Ich würde versuchen, das zu beheben.

1) Haben Sie ssh-add ausgeführt, um Ihren Schlüssel zu SSH hinzuzufügen?

2) Schließen Sie das Terminalfenster zwischen den Verwendungen, denn wenn Sie das Fenster schließen, müssen Sie das Kennwort erneut eingeben, wenn Sie es erneut öffnen.

Jeff Welling
quelle
2
Wäre schön, Informationen darüber hinzuzufügen, wie man das erste Problem löst Jeff Welling.
Ranu
5

Wenn die oben genannten Lösungen für mich nicht funktionieren, müssen Sie überprüfen, ob Sie (normalerweise id_rsa.pub) auch über den öffentlichen Schlüssel verfügen . Es ist ungewöhnlich, das nicht zu tun, aber das war die Ursache für mich.

So erstellen Sie Ihren öffentlichen Schlüssel aus Ihrem privaten Schlüssel:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Stephen Harris
quelle
1

Ich probiere verschiedene Lösungen aus, aber nichts hilft. Aber diese Schritte ( meine GitBash SSH-Umgebung fragt immer nach meiner Passphrase, was kann ich tun? ) Von Bitbucket.com-Nähten funktionieren gut:

Die Idee ist:

  1. Sie erstellen eine ~/.bashrcDatei

  2. füge folgendes Skript hinzu:

    SSH_ENV=$HOME/.ssh/environment
    
    # start the ssh-agent
        function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
        echo succeeded
        chmod 600 "${SSH_ENV}"
        . "${SSH_ENV}" > /dev/null
        /usr/bin/ssh-add
    }
    
    if [ -f "${SSH_ENV}" ]; then
         . "${SSH_ENV}" > /dev/null
         ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
            start_agent;
        }
    else
        start_agent;
    fi
    
  3. Führen Sie Bash erneut aus

Alx Lerche
quelle
1

Eine andere mögliche Lösung, die oben nicht erwähnt wurde, besteht darin, Ihre Fernbedienung mit dem folgenden Befehl zu überprüfen:

git remote -v

Wenn die Fernbedienung nicht mit git, sondern mit https startet, können Sie sie anhand des folgenden Beispiels in git ändern.

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin [email protected]:user/myrepo.git
git remote -v // check if remote is changed
Darkov
quelle