Verweigerung der Berechtigung (öffentlicher Schlüssel) für gitlab

134

Mein Problem ist, dass ich nicht von GitLab pushen oder abrufen kann. Ich kann jedoch klonen (über HTTP oder über SSH). Ich erhalte diese Fehlermeldung, wenn ich versuche zu pushen:

Berechtigung verweigert (publickey) schwerwiegend: Konnte nicht aus dem Remote-Repository lesen

Von all den Themen, die ich mir angesehen habe, habe ich Folgendes getan:

  • Richten Sie einen SSH-Schlüssel auf meinem Computer ein und fügen Sie den öffentlichen Schlüssel zu GitLab hinzu
  • Fertig die Konfiguration --global für Benutzername und E-Mail
  • Über SSH und HTTP geklont, um zu überprüfen, ob das Problem dadurch behoben werden kann
  • Erledigt den Befehl ssh -T [email protected]

Wenn Sie einen Einblick in die Lösung meines Problems haben, wäre dies sehr dankbar.

Alexandre Fernandes Bartolomeu
quelle
5
Laufen Sie, um ssh -vvvv [email protected]zu sehen, ob es den SSH-Schlüssel abholt
Nils Werner
1
Haben Sie den SSH-Schlüssel über gitlab.com/profile/keys hinzugefügt ?
Akram Tarife
@ Nils Werner: Ich bekomme viele Zeilen, wenn ich diesen Befehl ausführe, aber eine davon ist "Authentifizierung erfolgreich (publickey)"
Alexandre Fernandes Bartolomeu
4
Stellen Sie sicher, dass Sie nicht ausgeführt sudo git clone [email protected]:project/somethiing.gitwerden. Andernfalls wird ssh /root/.sshanstelle des von Ihnen hochgeladenen Schlüssels ~/.ssh/id_rsa
angezeigt
1
Ich habe das gleiche Problem gelöst, indem ich dem Agenten über "ssh-add ~ / .ssh / the_key" einen Schlüssel hinzugefügt habe, gefolgt von der Autorisierung des Schlüssels nach Phrase. Dies ist der private Teil dessen, was ich zu GitLab hinzugefügt habe.
Celdor

Antworten:

257

Ich habe das gefunden, nachdem ich viel gesucht habe. Es wird perfekt für mich funktionieren.

  1. Gehen Sie wie cmd zu "Git Bash". Klicken Sie mit der rechten Maustaste und klicken Sie auf "Als Administrator ausführen".
  2. Art ssh-keygen
  3. Drücken Sie Enter.
  4. Sie werden aufgefordert, den Schlüssel in einem bestimmten Verzeichnis zu speichern.
  5. Drücken Sie Enter. Sie werden aufgefordert, ein Passwort einzugeben oder ohne Passwort einzugeben.
  6. Der öffentliche Schlüssel wird für das jeweilige Verzeichnis erstellt.
  7. Gehen Sie nun in das Verzeichnis und öffnen Sie den .sshOrdner.
  8. Sie sehen eine Datei id_rsa.pub. Öffnen Sie es auf dem Notizblock. Kopieren Sie den gesamten Text daraus.
  9. Gehen Sie zu https://gitlab.com/profile/keys .
  10. Fügen Sie hier in das Textfeld "Schlüssel" ein.
  11. Klicken Sie nun unten auf "Titel". Es wird automatisch gefüllt.
  12. Klicken Sie dann auf "Schlüssel hinzufügen".

Probieren Sie es jetzt aus und es wird sicher funktionieren.

Muhammad Laraib Khan
quelle
2
Falls Sie beim Kopieren der Pub-Datei in die Zwischenablage verloren gehen. Versuchen Sie Folgendes:type %userprofile%\.ssh\id_rsa.pub | clip
Jquijano
5
Wenn Sie in Windows 10 .ssh \ id_rsa.pub suchen müssen, können Sie diese cat ~ / .ssh / id_rsa.pub in git bash eingeben. Daraufhin wird der "Schlüssel" angezeigt , sodass Sie ihn kopieren und in das Textfeld einfügen können in gitlab.com/profile/keys
Chutipong Roobklom
11
ssh-add filenameStellen Sie sicher, dass Sie dies tun: (mit-Pfad, wenn nicht im rsa-Verzeichnis), nachdem Sie die obigen Schritte ausgeführt haben
Blasanka
3
Lief wie am Schnürchen. Vielen Dank.
Brduca
3
Ich habe dies getan, Problem ist nicht behoben, Berechtigungen verweigert
Billal Begueradj
62

Schritt 1: Es wurde eine Konfigurationsdatei in die ~/.ssh/configDatei eingefügt, die aussieht

   User git
   Hostname gitlab.com
   IdentityFile ~/.ssh/id_rsa_gitlab
   TCPKeepAlive yes
   IdentitiesOnly yes

Schritt 2: Klonen Sie einfach das Git Repo OHNE Sudo.
Dokumentation: https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths

Fedo Peralta
quelle
1
Dies ist erforderlich, wenn die Schlüsseldatei mit dem Standardnamen bereits für verschiedene Zwecke verwendet wird. Wenn Sie eine Schlüsseldatei mit einem nicht standardmäßigen Namen erstellen, wie id_rsa_gitlabin Fedos Beispiel, müssen Sie eine Konfigurationsdatei angeben. Gitlabs netter Artikel über die Angelegenheit: gitlab.com/help/ssh/…
Dany
Das hat bei mir funktioniert. Ich hatte sowohl Github- als auch Gitlab-Schlüssel, damit Sie für diese Lösung.
M.Cush
Ich muss mich ändern Hostname, Hostdamit dies funktioniert
Sadee
27

Ich denke, die einfache Lösung besteht darin, dem Authentifizierungsagenten einen privaten Schlüssel hinzuzufügen (falls Ihr Schlüssel nicht vorhanden ist ~/.ssh/id_rsa).

ssh-add ~/.ssh/<your private key>

Sie lassen sich im Grunde ssh-agentdarum kümmern.

Zusätzlich können Sie es dauerhaft hinzufügen .

Hussain
quelle
Es ist die Datei mit der Erweiterung .pub
Felipe
7
Nein. Privater Schlüssel ist die Datei ohne .pubErweiterung.
Hussain
15

In meinem Fall hat es in der WSL (Windows Subsystem for Linux) nicht funktioniert.

Wenn ich die WSL starte, muss ich

  • starte ssh-agent_ eval $(ssh-agent -s)
  • Fügen Sie dem SSH-Agenten den Schlüssel hinzu: ssh-add ~/.ssh/id_rsa
  • Wenn Sie dazu aufgefordert werden, geben Sie das Passwort ein

Jetzt funktioniert die Verbindung.
Wir können dies mit testenssh -T [email protected]

Anmerkungen:

TmTron
quelle
11

Stellen Sie sicher, dass Sie nicht ausgeführt sudo git clone [email protected]:project/somethiing.gitwerden. Andernfalls wird ssh /root/.sshanstelle des von Ihnen hochgeladenen Schlüssels angezeigt~/.ssh/id_rsa

rivanov
quelle
9

Hierfür gibt es eine sehr einfache Lösung: Anstatt mit ssh zu arbeiten, wechseln Sie zu https. Dazu: In Ihrem Projektordner befindet sich ein .git-Ordner - Sie haben eine Konfigurationsdatei - öffnen Sie diese in einem Texteditor und ändern Sie die Zeile

url [email protected]: Ihr Name / Ihr Projekt.git

zu

url = https://gitlab.com/yourname/yourproject.git

Elad
quelle
Danke dir. Hat für mich gearbeitet.
ktv6
7

Wenn Sie unter Linux oder Macox arbeiten, versuchen Sie dies einfach im Terminal:

ssh-add -l

Wenn es nichts zurückgibt, versuchen Sie Folgendes:

ssh-add

Es muss eine Identität in ~ / .ssh / id_rsa erstellen

nach erneutem Versuch:

ssh-add -l

Es muss Ihre Identität zurückgeben. Nach dem erneuten Klonen muss es funktionieren

NB: Vergessen Sie nicht, Ihren SSH-Schlüssel in Ihr Profil-Gitlab einzufügen

Vielen Dank

Rapaelec
quelle
5

In meinem Fall war es kein Gitlab-Problem, sondern ein SSHD-Konfigurationsproblem. Der SSH-Server hat bis auf eine Liste von Benutzern keine Verbindung zugelassen. Der Benutzer git, der eine Remoteverbindung mit gitlab herstellt, war nicht in dieser Liste enthalten. Überprüfen Sie dies also vor allem anderen.

Sie können Ihre SSH-Serverkonfiguration in überprüfen /etc/ssh/sshd_config. Wenn Sie eine Zeile mit der Option haben AllowUsers, fügen Sie git hinzu:

AllowUsers user1 user2 user3 git
skotperez
quelle
3

Ich habe Gitlab mit Docker ausgeführt. Dies ist, was ich getan habe, um mein Problem zu beheben.

Es wurde festgestellt, dass in Docker / var / log / gitlab / sshd / current mehrere Vorkommen einer Nachricht aufgetreten sind :

Authentifizierung abgelehnt: fehlerhafter Besitz oder Modi für die Datei /var/opt/gitlab/.ssh/authorized_keys

Danach habe ich den Besitz dieser Datei von 99: users in git: users geändert mit:

chown git: Benutzer autorisierte_Tasten

xab
quelle
1
Ich danke dir sehr. Ich führe Gitlab auf Kubernetes aus und das Verzeichnis / gitlab-data (das auch der Mountpunkt für autorisierte Schlüssel ist) hatte Berechtigungsprobleme. Ein einfaches Chown war genug.
Dillen Meijboom
3

Schritte zu tun, bekam den gleichen Fehler, aber ich habe es behoben. Gitlab möchte ssh-rsa. Im Folgenden finden Sie den Code zum Ausführen von ssh für rsa

  1. ssh-keygen -o -t rsa -b 4096 -C "[email protected]"

[email protected] ist die E-Mail-Adresse Ihres Gitlab-Kontos

  1. Sie werden zur Eingabe aufgefordert. Drücken Sie einfach die Eingabetaste, nachdem der folgende Code zur Eingabe aufgefordert wurde.

    Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/home/yourDesktopName/.ssh/id_rsa):

  2. Sie werden erneut zur Eingabe aufgefordert. Drücken Sie einfach die Eingabetaste, nachdem der folgende Code zur Eingabe aufgefordert wurde.

    Passphrase eingeben (leer für keine Passphrase):

  3. Sie werden erneut aufgefordert, das letzte Mal einzugeben. Drücken Sie einfach die Eingabetaste, nachdem der folgende Code aufgefordert wurde.

    Geben Sie dieselbe Passphrase erneut ein:

  4. Sie zeigen Ihre ssh-rsa generieren.

  5. Melden Sie sich bei Ihrem Gitlab-Konto an und gehen Sie zur rechten Navigationsleiste, die Sie erhalten. In der linken Seitenleiste erhalten Sie den SSH-Schlüssel. Treten Sie ein.

  6. Schauen Sie über die Eingabeaufforderung, die Sie zur Eingabe auffordert, und Sie erhalten den Pfad von ssh-rsa.

  7. Gehen Sie zu Ihrem SSH-Ordner und rufen Sie die Datei id_rsa.pub auf

  8. Öffnen Sie es und holen Sie sich den Schlüssel und kopieren Sie das Einfügen in das Gitlab. Sie sind fast fertig.

  9. Überprüfen Sie durch: ssh -T [email protected]

  10. Sie erhalten: Welcome to GitLab, @joy4!

  11. Getan.

Y. Joy Ch. Singha
quelle
Vielen Dank. Dies funktioniert unter Windows 10. Ich habe versucht, ed25519 wie von Gitlab angewiesen, aber nicht funktioniert.
Dika
Diese Antwort ist ziemlich gut - nicht sicher, warum sie nicht höher gewählt wurde.
mgibson
3

Früher war es sehr schwierig für mich, aber als ich es versuchte, wurde es so einfach, SSH-Schlüssel in Mac und Linux hinzuzufügen. Es gibt einige Schritte und Befehle, um dies wie folgt zu tun:

  1. Öffnen Sie ein Terminal Ihres Systems und verschieben Sie es mit dem folgenden Befehl in Ihr Projektverzeichnis:
cd 'project directory name'
  1. Führen Sie den Befehl ssh-keygenin diesem Terminal aus und geben Sie ihn ein, bis dort das Randomart-Bild des Schlüssels angezeigt wird.

  2. Geben Sie dann einen weiteren Befehl in dieses Terminal ein:

cat ~/.ssh/id_rsa.pub

Es wird Ihren SSH-Schlüssel generieren. Der Schlüssel beginnt mit ssh-rsaund endet mit .local.

  1. Kopieren Sie den Schlüssel und gehen Sie zu Ihrem Gitlab-Profilabschnitt, dann ssh keyAbschnitt und fügen Sie ihn dort ein. Klicken Sie auf die AddSchaltfläche, dies wird funktionieren.
kumar ujjawal
quelle
das hat bei mir funktioniert! danke
Shamseer Ahammed
2

Ich hatte das gleiche Problem und habe es durch Hinzufügen eines neuen SSH-Schlüssels behoben:

  1. ssh-keygen -t ed25519 -C "[email protected]"
  2. Kopieren Sie Ihren öffentlichen SSH-Schlüssel in die Zwischenablage ( xclip -sel clip < ~/.ssh/id_ed25519.pubin meinem Fall unter Linux).
  3. Gehen Sie auf gitlab zu den settings=>sshSchlüsseln und übergeben Sie den neuen Schlüssel
Ahmed AMMOURI
quelle
2

Wenn Sie mehrere Git-Konten haben und unterschiedliche SSH-Schlüssel möchten

Sie müssen den gleichen Schritt ausführen, um den SSH-Schlüssel zu generieren, aber stellen Sie sicher, dass Sie

ssh-keygen -t ed25519 -C "[email protected]" 

Geben Sie den Pfad ein, den Sie speichern möchten (Beispiel: my-pc / Desktop / .ssh / ed25519).

Fügen Sie den öffentlichen Schlüssel zu Ihrem Gitlab hinzu ( So fügen Sie dem Gitlab den SSH- Schlüssel hinzu )

Sie müssen eine neue SSH-Identität mit dem folgenden Befehl erstellen

ssh-add ~/my-pc/Desktop/.ssh/ed25519
Srikrushna
quelle
2

Hauptsächlich zwei Dinge

  1. Sie müssen die Schlüssel id_rsa.pub und id_rsa (privat) in Ihrem .ssh-Ordner haben (der sich in Ihrem Home-Ordner befinden sollte. Erstellen Sie ihn, wenn er nicht vorhanden ist, und legen Sie Ihre Schlüssel ab). Es würde nicht funktionieren, wenn Sie Ihre Schlüsseldateien anders benannt haben

  2. Ändern Sie die Berechtigung der id_rsa in chmod 400 ~ / .ssh / id_rsa

Cherankrish
quelle
2

Ein weiteres Problem, das dieses Verhalten verursachen kann, ist, wenn Sie ein Setup mit 2 möglichen% HOME% -Lokalisierungen haben.

Ich verwende einen PC, auf dem einige meiner Dokumente lokal und einige auf einem Netzwerklaufwerk gespeichert sind. Einige Anwendungen denken , dass C:\Users\<MyUserName>\es meine ist %home%, andere denken, dass dies U:\die Heimat ist.

Es stellte sich heraus, dass ssh-keygenich meinen privaten Schlüssel unter C:\users\<MyUserName>\und das stecke ssh -Tund ssh -vauch dort nachschaue.

Abgesehen davon scheint alles gut zu funktionieren git clone, git pushund andere suchen nach einem Schlüssel U:\. Was fehlschlägt, so bekomme ich den oben genannten Fehler.

Ich habe eine Stunde gebraucht, um das herauszufinden, aber am Ende war die Lösung einfach: Ich habe alles von C:\Users\<MyUserName>\.sshbis kopiertU:\.ssh

Emil Bode
quelle
1

Ich habe so gelöst ..

Mit diesem Befehl wurde ein Schlüssel für Windows generiert:

ssh-keygen -t rsa -C "[email protected]" -b 4096

Das Problem war jedoch, dass nach dem Ausführen dieses Befehls eine Zeile angezeigt wurde: "Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/c/Users/xxx/.ssh/id_rsa):" Hier habe ich nur den Dateinamen angegeben, weshalb Mein Schlüssel wurde in meinem PWD und nicht an dem angegebenen Ort gespeichert. Als ich "git clone" gemacht habe, wurde angenommen, dass sich der Schlüssel an der Position "/c/Users/xxx/.ssh/id_rsa" befindet, aber er wurde nicht gefunden, daher wurde ein Fehler ausgelöst.

Zum Zeitpunkt der Schlüsselgenerierung wurden 2 Dateien generiert, z. B. "file1" & "file1.pub". Ich habe beide Dateien umbenannt in

file1 -> id_rsa 

und

file1.pub -> id_rsa.pub

und platzierte beide an der Stelle "/c/Users/xxx/.ssh/"

Sugandha Jain
quelle
1

Gehen Sie zum Terminal und generieren Sie den SSH-Schlüssel erneut. Typ ssh-keygen. Sie werden gefragt, wo Sie es speichern möchten. Geben Sie den Pfad ein.

Kopieren Sie dann den öffentlichen Schlüssel auf die gitlabs-Plattform. Es beginnt normalerweise mit ssh-rsa.

rekussiv
quelle
1

Das Problem für mich war, dass ich in der SSH-Konfigurationsdatei unter UsePAMvon yeszu gewechselt habe . Mit allem funktioniert perfekt.no/etc/ssh/sshd_configUsePAM yes

Manifestator
quelle
1

Ich fand die Lösung in der Gitlab-Hilfe .

To create a new SSH key pair: 
 1. Open a terminal on Linux or macOS, or Git Bash / WSL on Windows.
 2. Generate a new ED25519 SSH key pair: ssh-keygen -t ed25519 -C "[email protected]"
 2.1 Or, if you want to use RSA: ssh-keygen -o -t rsa -b 4096 -C "[email protected]"
 3. Next, you will be prompted to input a file path to save your SSH key pair to... use the suggested path by pressing Enter
 4. Once the path is decided, you will be prompted to input a password to secure your new SSH key pair. It's a best practice to use a password, but it's not required and you can skip creating it by pressing Enter twice.
 5. Copy your public SSH key to the clipboard by using one of the commands below depending on your Operating System:
        macOS:        pbcopy < ~/.ssh/id_ed25519.pub
        WSL / GNU/Linux (requires the xclip package):      xclip -sel clip < ~/.ssh/id_ed25519.pub
        Git Bash on Windows:      cat ~/.ssh/id_ed25519.pub | clip
 6. Navigating to SSH Keys and pasting your public key in the Key field
 7. Click the Add key button

Ich hoffe es kann einigen von euch helfen!

JoeyGutMen
quelle
1

Wie füge ich einen SSH-Schlüssel zum Gitlab-Konto in Ubuntu hinzu?

  1. Öffnen Sie das Terminal in Ihrem Projektverzeichnis.
  2. Geben Sie 'ssh-keygen -o -t rsa -b 4096 -C "Ihre Gitlab-E-Mail" ein und drücken Sie die Eingabetaste
  3. Geben Sie 'vim /home/mnbtech/.ssh/id_rsa.pub' ein und drücken Sie die Eingabetaste (oder öffnen Sie Ihre 'id_rsa.pub' manuell von dem Ort aus, an dem Sie sie gespeichert haben).
  4. Der SSH-Schlüssel wird angezeigt. Kopieren Sie diese und

  5. Gehen Sie zu Ihrem Gitlab-Konto.

  6. Klicken Sie auf Profilbild und dann auf Einstellung
  7. Wählen Sie auf der linken Seite SSH-Keys
  8. Fügen Sie dann diesen Schlüssel ein. Klicken Sie auf Schlüssel hinzufügen

SSH-Key wird hinzugefügt!

(Hinweis, wenn Sie den SSH-Schlüssel "Vorschau generieren" und die Berechtigung "Abrufen" verweigert haben (öffentlicher Schlüssel). Sie löschen Ihren SSH-Schlüssel "Vorschau" und generieren einen neuen und fügen git user.name und email auf Ihrem Terminal hinzu.)

Ismail Hossain
quelle
Was ist in dieser Antwort anders als in den vorherigen Anweisungen?
RalfFriedl
1

Ich habe das [email protected]: Permission denied (publickey)Problem mithilfe der folgenden Anweisungen gelöst

  1. LAUF cat ~/.ssh/id_rsa.pub
  2. Kopieren Sie id_rsa.pub(öffentlicher Schlüssel) in Ihr getlab `Setting -> SSH Keys
  3. LAUF cat ~/.ssh/id_rsa
  4. Kopieren Sie id_rsa(privater Schlüssel) nach `Code_repo-> git_auth-> id_rsa

ANMERKUNG: Kümmern Sie sich um den Computerbenutzer, wenn Sie den rootBenutzer in Ihrer DockerFile oder an einem anderen Ort verwenden, sudo subevor Sie die obigen Befehle ausführen, um öffentliche und private Schlüssel des Root-Benutzers abzurufen .

Umar Hayat
quelle
1

In unserem Fall war dies kein Problem auf der Benutzer- / Clientseite, sondern auf der Gitlab-Serverseite.

Wir führen eine lokale Gitlab CE 12.9-Instanz unter CentOS 7.1 aus.

Wir haben festgestellt, dass auf dem Server die Datei .ssh / authorized_keys nicht ordnungsgemäß aktualisiert wurde. Benutzer erstellen ihre SSH-Schlüssel (gemäß dem Gitlab-Handbuch) und fügen sie dem Gitlab-Server hinzu. Der Server aktualisiert jedoch nicht die autorisierten Schlüssel , sodass immer Fehler mit Berechtigungsverweigerung auftreten.

Eine Problemumgehung bestand darin , die Datei "authorized_keys" neu auszuführen, indem Folgendes ausgeführt wurde:

$ sudo gitlab-rake gitlab:shell:setup

Das würde für jeden funktionieren, der seine Schlüssel hinzugefügt hat, bevor er die Rechenaufgabe ausgeführt hat. Für die nächsten Benutzer, die ihre Schlüssel hinzufügen würden, muss jemand die Rechenaufgaben erneut manuell ausführen.

Eine dauerhaftere Lösung bestand darin , die Datei authorized_keys nicht zu verwenden und stattdessen eine indizierte Suche in der Gitlab-Datenbank zu verwenden :

GitLab Shell bietet eine Möglichkeit, SSH-Benutzer über eine schnelle, indizierte Suche in der GitLab-Datenbank zu autorisieren. GitLab Shell verwendet den Fingerabdruck des SSH-Schlüssels, um zu überprüfen, ob der Benutzer berechtigt ist, auf GitLab zuzugreifen.

Fügen Sie Ihrer sshd_configDatei Folgendes hinzu . Dies befindet sich normalerweise bei /etc/ssh/sshd_config, aber es wird sein, /assets/sshd_configwenn Sie Omnibus Docker verwenden:

Match User git    # Apply the AuthorizedKeysCommands to the git user only   
  AuthorizedKeysCommand /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell-authorized-keys-check git %u %k   
  AuthorizedKeysCommandUser git 
Match all    # End match, settings apply to all users again 

OpenSSH neu laden:

# Debian or Ubuntu installations   
sudo service ssh reload

# CentOS installations   
sudo service sshd reload 

Stellen Sie sicher, dass SSH funktioniert, indem Sie den SSH-Schlüssel Ihres Benutzers in der Benutzeroberfläche entfernen, einen neuen hinzufügen und versuchen, ein Repo abzurufen.

Standardmäßig (auch die Standardeinstellung in unserer Installation) wurde die Datei In autorisierte Schlüssel schreiben in den Einstellungen Admin-Bereich> Leistungsoptimierung aktiviert . Also haben wir das deaktiviert und stattdessen die Gitlab-Datenbank verwendet.

Geben Sie hier die Bildbeschreibung ein

Nach dem Einrichten der indizierten Suche und dem Deaktivieren der Datei In autorisierte Schlüssel schreiben wurde der SSH-Zugriff OK.

Gino Mempin
quelle
1

Für alle, die Windows 10 verwenden und nichts anderes für sie arbeiten:

In meinem Fall musste ich das Repo mit https anstelle von ssh klonen und ein Fenster öffnete sich und fragte nach meinen Anmeldeinformationen. Danach funktioniert alles gut.

Tasos Anesiadis
quelle
1

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 -vAusgabe festgelegte URL Ihre Remote-URL.

Die Protokolle

Grundsätzlich funktioniert Git Clone / Push / Pull hauptsächlich mit zwei verschiedenen Protokollen (es gibt auch andere) -

  1. HTTP-Protokoll
  2. 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 [email protected]:wizpanda/backend-app.gitfolgt 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.

  1. Generieren Sie ein Schlüsselpaar `ssh-keygen -t rsa -b 2048 -C" Mein gemeinsamer SSH-Schlüssel "
  2. Das generierte Schlüsselpaar wird standardmäßig in den ~/.sshNamen id_rsa.pub(öffentlicher Schlüssel) und id_rsa(privater Schlüssel) angegeben.
  3. Sie speichern den öffentlichen Schlüssel in Ihrem GitLab-Konto (der gleiche Schlüssel kann in mehreren oder beliebigen Servern / Konten verwendet werden).
  4. Wenn Sie klonen / drücken / ziehen, bietet GIT Ihren privaten Schlüssel an.
  5. 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 :)

Shashank Agrawal
quelle
0

Ich habe meine ~/.ssh/id_rsa.pubzur Liste der bekannten SSH-Schlüssel in meinen GitLab-Einstellungen https://gitlab.com/profile/keys hinzugefügt . Das hat das Problem für mich gelöst. :-)

seonghuhn
quelle
0

Ich verwende Ubuntu 18.04 und es war tatsächlich ein Berechtigungsproblem auf meinem lokalen Computer. Das Problem wurde behoben, als ich die Lese- / Schreibberechtigung für meinen .git-Ordner festlegte.

Manian
quelle
0

Nun, ich hatte das gleiche Problem und nachdem ich die Antwort versucht hatte, schlug @Khan vor. Ich konnte es jedoch nur zum Laufen bringen, indem ich einfach die Ursprungs-URL in der .git / config-Datei in die https-Adresse änderte: https://gitlab.com/mygitlabusername/mygitproject.git

Da der Zugriff über ssh verweigert wird, habe ich herausgefunden, dass die Verwendung von https kein Problem sein sollte. Bei jedem Push an das at-Repository werden Sie jedoch nach Ihrem Benutzernamen und Passwort gefragt

larrytech
quelle
0

Bitte verwenden Sie, git config credential.helper storewenn Ihre Site TLS / SSL verwendet. Hoffe das funktioniert

gmaam
quelle
0

Es scheint Unterschiede zwischen den beiden Möglichkeiten zu geben, auf ein Git-Repository zuzugreifen, dh entweder mit SSH oder HTTPS. Bei mir ist der Fehler aufgetreten, weil ich versucht habe, mein lokales Repository mit SSH zu pushen.

Das Problem kann einfach gelöst werden, indem Sie auf der Zielseite Ihres Projekts auf die Schaltfläche "Klonen" klicken, den HTTPS-Link kopieren und durch den SSH-Link ersetzen, der im Format "git @ gitlab ..." angezeigt wird.

tonderaimuchada
quelle
Das beantwortet die Frage nicht.
RalfFriedl
0

Berechtigung ändern :: chmod 400 ~ / .ssh / id_rsa Es hat mir geholfen.

Rajim
quelle