Ich weiß, ich antworte sehr spät und sogar StackOverflow hat bestätigt, ob ich wirklich antworten möchte. Ich antworte, weil niemand das eigentliche Problem beschrieben hat und es deshalb teilen wollte.
Die Grundlagen
Verstehe zuerst, was hier die Fernbedienung ist. Remote ist GitLab und Ihr System ist lokal. Wenn wir also über Remote sprechen origin
, ist die in Ihrer git remote -v
Ausgabe festgelegte URL Ihre Remote-URL.
Die Protokolle
Grundsätzlich funktioniert Git Clone / Push / Pull hauptsächlich mit zwei verschiedenen Protokollen (es gibt auch andere) -
- HTTP-Protokoll
- SSH-Protokoll
Wenn Sie ein Repo klonen (oder die Remote-URL ändern) und die HTTP-URL wie https://gitlab.com/wizpanda/backend-app.git verwenden, wird das erste Protokoll verwendet, dh das HTTP-Protokoll.
Wenn Sie das Repo klonen (oder die Remote-URL ändern) und die URL wie git@gitlab.com:wizpanda/backend-app.git
folgt verwenden, wird das SSH-Protokoll verwendet.
HTTP-Protokoll
In diesem Protokoll verwendet jede Remote-Operation, dh Klonen, Drücken und Ziehen, die einfache Authentifizierung, dh Benutzername und Passwort Ihrer Remote (in diesem Fall GitLab). Dies bedeutet, dass Sie für jede Operation Ihren Benutzernamen und Ihr Passwort eingeben müssen, was möglicherweise umständlich ist .
Wenn Sie also pushen / ziehen / klonen, authentifiziert GitLab / GitHub Sie mit Ihrem Benutzernamen und Passwort und ermöglicht Ihnen den Vorgang.
Wenn Sie dies versuchen möchten, können Sie durch Ausführen des Befehls zur HTTP-URL wechseln git remote set-url origin <http-git-url>
.
Um diesen Fall zu vermeiden, können Sie das SSH-Protokoll verwenden.
SSH-Protokoll
Eine einfache SSH-Verbindung funktioniert mit öffentlich-privaten Schlüsselpaaren. In Ihrem Fall kann GitLab Sie also nicht authentifizieren, da Sie für die Kommunikation eine SSH-URL verwenden. Jetzt muss GitLab Sie irgendwie kennen. Dazu müssen Sie ein öffentlich-privates Schlüsselpaar erstellen und GitLab den öffentlichen Schlüssel geben.
Wenn Sie jetzt mit GitLab pushen / ziehen / klonen, bietet GIT (intern SSH) standardmäßig Ihren privaten Schlüssel für GitLab an und bestätigt Ihre Identität. Mit GitLab können Sie den Vorgang ausführen.
Also werde ich die Schritte, die Muhammad bereits gegeben hat, nicht wiederholen, sondern sie theoretisch wiederholen.
- Generieren Sie ein Schlüsselpaar `ssh-keygen -t rsa -b 2048 -C" Mein gemeinsamer SSH-Schlüssel "
- Das generierte Schlüsselpaar wird standardmäßig in den
~/.ssh
Namen id_rsa.pub
(öffentlicher Schlüssel) und id_rsa
(privater Schlüssel) angegeben.
- Sie speichern den öffentlichen Schlüssel in Ihrem GitLab-Konto (der gleiche Schlüssel kann in mehreren oder beliebigen Servern / Konten verwendet werden).
- Wenn Sie klonen / drücken / ziehen, bietet GIT Ihren privaten Schlüssel an.
- GitLab vergleicht den privaten Schlüssel mit Ihrem öffentlichen Schlüssel und ermöglicht Ihnen die Ausführung.
Tipps
Sie sollten immer einen starken rsa-Schlüssel mit mindestens 2048 Bytes erstellen. So kann der Befehl sein ssh-keygen -t rsa -b 2048
.
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
Allgemeiner Gedanke
Beide Ansätze haben ihre Vor- und Nachteile. Nachdem ich den obigen Text eingegeben hatte, suchte ich mehr darüber, weil ich nie etwas darüber gelesen hatte.
Ich habe dieses offizielle Dokument https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols gefunden, das mehr darüber erzählt. Mein Punkt hier ist, dass Sie durch Lesen des Fehlers und Nachdenken über den Fehler Ihre eigene Theorie oder Ihr eigenes Verständnis erstellen und dann mit einigen Google-Ergebnissen übereinstimmen können, um das Problem zu beheben :)
ssh -vvvv git@gitlab.com
zu sehen, ob es den SSH-Schlüssel abholt