Schreiben Sie dies für diejenigen, die gerade erst mit Git und BitBucket unter Windows beginnen und mit Bash nicht so vertraut sind (da dies sowohl ein häufiges Problem als auch ein hochrangiges Google-Ergebnis ist, wenn Sie nach der Fehlermeldung in der Frage suchen).
Für diejenigen, denen HTTPS nichts ausmacht und die nach einer schnellen Lösung suchen, scrollen Sie zum Ende dieser Antwort, um Anweisungen unter FOR THE LAZY zu erhalten
Befolgen Sie für diejenigen, die das eigentliche Problem lösen möchten, die folgenden Anweisungen:
Behebung des SSH-Problems so schnell wie möglich
Dies ist eine Reihe von Anweisungen, die von der von VonC verknüpften URL abgeleitet sind. Es wurde so modifiziert, dass es so belastbar und prägnant wie möglich ist.
Legen Sie Ihre globalen Informationen fest, falls Sie dies noch nicht getan haben:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
Auf OpenSSH prüfen:
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
Sehen Sie so etwas?
- Ja: Weiter.
- Nein: Gehen Sie zum Abschnitt FOR THE LAZY oder folgen Sie dem verlinkten Artikel von VonC.
Überprüfen Sie, ob Sie die Schlüssel bereits generiert haben:
$ ls -a ~/.ssh/id_*
Wenn zwei Dateien vorhanden sind, können Sie den nächsten Schritt überspringen.
$ ssh-keygen
Belassen Sie alles als Standard, geben Sie eine Passphrase ein. Sie sollten jetzt Ergebnisse mit diesem Befehl sehen:
$ ls -a ~/.ssh/id_*
Suchen Sie nach einer vorhandenen Konfigurationsdatei:
$ ls -a ~/.ssh/config
Wenn Sie ein Ergebnis erhalten, überprüfen Sie diese Datei auf fehlerhafte Informationen. Wenn keine Datei vorhanden ist, gehen Sie wie folgt vor:
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
Bestätigen Sie den Inhalt:
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
- Das einzelne Leerzeichen vor "IdentityFile" ist erforderlich.
Überprüfen Sie, ob Sie den SSH-Agenten jedes Mal starten, wenn Sie GitBash ausführen:
$ cat ~/.bashrc
- Wenn Sie eine aufgerufene Funktion sehen
start_agent
, ist dieser Schritt bereits abgeschlossen.
- Wenn keine Datei vorhanden ist, fahren Sie fort.
- Wenn es eine Datei gibt, die diese Funktion nicht enthält, befinden Sie sich in einer schwierigen Situation. Es ist wahrscheinlich sicher, daran anzuhängen (anhand der folgenden Anweisungen), aber möglicherweise nicht! Wenn Sie sich nicht sicher sind, erstellen Sie eine Sicherungskopie Ihrer .bashrc-Datei, bevor Sie die folgenden Anweisungen befolgen, oder fahren Sie mit dem Abschnitt FOR THE LAZY fort .
Geben Sie Folgendes in GitBash ein, um Ihre .bashrc-Datei zu erstellen:
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
Überprüfen Sie, ob die Datei erfolgreich erstellt wurde (Ihre sollte sich nur dort unterscheiden, wo "Ihr Benutzername" angezeigt wird):
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.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
- Schließen Sie GitBash und öffnen Sie es erneut.
- Sie sollten nach Ihrer Passphrase gefragt werden (nach der zuvor generierten SSH-Datei).
- Wenn Sie nicht dazu aufgefordert werden, haben Sie entweder keine Passphrase festgelegt oder GitBash führt das .bashrc-Skript nicht aus (was seltsam wäre. Überprüfen Sie daher den Inhalt!). Wenn Sie dies auf einem Mac (OS X) ausführen,
.bashrc
wird es nicht standardmäßig ausgeführt - .bash_profile
ist. Um dies zu beheben, fügen Sie dieses Snippet in Folgendes ein .bash_profile
:[[ -s ~/.bashrc ]] && source ~/.bashrc
Wenn Sie keine Passphrase eingegeben hätten, hätten Sie beim Starten von GitBash Folgendes gesehen:
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
Und Folgendes sollte Ergebnisse liefern:
$ ssh-add -l
Wenn Sie jedoch Folgendes erhalten von ssh-add -l
:
Could not open a connection to your authentication agent.
Der SSH-Agent wurde nicht erzeugt, und Ihr .bashrc ist wahrscheinlich die Ursache.
Wenn beim Starten von GitBash Folgendes angezeigt wird:
Initializing new SSH agent...
sh.exe": : No such file or directory
Das heißt, Sie haben vergessen, das $ mit einem \ zu maskieren, als Sie in die Datei zurückgingen (dh die Variablen wurden erweitert). Erstellen Sie Ihre .bashrc neu, um dies zu beheben.
Stellen Sie sicher, dass der Agent ausgeführt wird und Ihre Schlüssel hinzugefügt wurden:
$ ssh-add -l
Sollte etwas Ähnliches zurückgeben:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
Führen Sie den folgenden Befehl aus, um Ihren öffentlichen Schlüssel abzurufen:
$ cat ~/.ssh/id_rsa.pub
(Es sollte etwas zurückgeben, das mit "ssh-rsa ......" beginnt.
- Klicken Sie auf das GitBash-Fenstersymbol
- Klicken Sie auf Bearbeiten
- Klicken Sie auf Markieren
- Markieren Sie den öffentlichen Schlüssel mit der Maus (einschließlich des führenden
ssh-rsa
Bits und des nachfolgenden == youremail@yourdomain.com
Bits).
- Klicken Sie mit der rechten Maustaste auf das Fenster (kopiert)
- Fügen Sie Ihren öffentlichen Schlüssel in Notepad ein.
- Löschen Sie alle Zeilenumbrüche so, dass es sich nur um eine einzelne Zeile handelt.
- Drücken Sie
CTRL+A
dann, CTRL+C
um den öffentlichen Schlüssel erneut in Ihre Zwischenablage zu kopieren.
Konfigurieren Sie Ihren privaten Schlüssel mit BitBucket, indem Sie die folgenden Schritte ausführen:
- Öffnen Sie Ihren Browser und navigieren Sie zur Site BitBucket.org
- Melden Sie sich bei BitBucket.org an
- Klicken Sie auf Ihren Avatar (oben rechts)
- Klicken Sie auf Konto verwalten
- Klicken Sie auf SSH-Schlüssel (unter Sicherheit im linken Menü).
- Klicken Sie auf Schlüssel hinzufügen
- Geben Sie
Global Public Key
für das Etikett ein
- Fügen Sie den öffentlichen Schlüssel ein, den Sie aus dem Editor kopiert haben
Ein Global Public Key
Eintrag sollte jetzt in Ihrer Schlüsselliste sichtbar sein.
- Kehren Sie zu GitBash zurück
- CD in das Verzeichnis, das Ihr Projekt enthält
- Ändern Sie Ihren Ursprung in die SSH-Variante (dies ist nicht der Fall, wenn Sie die Schritte FOR THE LAZY ausgeführt haben ).
Überprüfen Sie Ihre Fernbedienungen:
$ git remote -v
Wechseln Sie zur SSH-URL:
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
Überprüfen Sie, ob die Dinge funktionieren:
$ git remote show origin
Sie sollten so etwas sehen:
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
GETAN!
Sie können HTTPS anstelle von SSH verwenden. Sie müssen Ihr Kennwort während des Remote-Betriebs eingeben (es wird vorübergehend zwischengespeichert, nachdem Sie es einmal eingegeben haben). So können Sie HTTPS konfigurieren:
FÜR DIE Faulen
Sie sollten das SSH-Problem wie von VonC beschrieben beheben. jedoch, wenn Sie in Eile sind zu begehen und haben nicht die Werkzeuge / Zeit / Wissen einen neuen öffentlichen Schlüssel zu erzeugen , gerade jetzt , stellen Sie Ihren Ursprung auf die HTTPS - Alternative:
> https://accountname@bitbucket.org/accountname/reponame.git
Verwenden eines GUI-Tools wie TortoiseGit oder Befehlszeilentools .
Hier ist die Dokumentation dieser alternativen Ursprungs-URL.
Befehlszeile zum Hinzufügen eines Ursprungs, falls einer nicht vorhanden ist:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
Befehlszeile zum Ändern eines vorhandenen Ursprungs:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
HINWEIS: Ihr Kontoname ist nicht Ihre E-Mail-Adresse.
Möglicherweise möchten Sie auch Ihre globalen Informationen festlegen:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Versuchen Sie es dann erneut (Sie müssen sich nicht erneut festlegen).
git push origin master