Welche "Zugriffsrechte" könnten den Zugriff auf ein Gitlab-Repository blockieren?

14

Ich versuche, Gitlab (6.5.1) auf einem frischen sauberen Server einzurichten. Alles scheint zu funktionieren, aber Git ist nicht in der Lage, auf ein Projekt zu pushen. Befolgen Sie die Befehle von der neu erstellten Projektseite und drücken Sie auf die Fernbedienung über ssh:

$ git push -u origin master
fatal: Could not read from remote repository.

Please make sure you have the correct access
rights and the repository exists.

Dies scheint ein recht verbreitetes Problem zu sein. Leider scheint es eine Reihe möglicher Ursachen zu geben, und keine davon scheint zu stimmen. Ab Ausgabe 3424 einer alten Version und verschiedenen anderen Online-Quellen habe ich die folgenden Vorschläge gesehen und geprüft:

  • Übrig gebliebene SSH-Schlüssel

    Dies ist ein sauberes Setup ohne Reste. Mein Schlüssel wurde der Datei mit den autorisierten Schlüsseln ordnungsgemäß hinzugefügt und ist der einzige aufgeführte Schlüssel.

  • Wenn Sie ssh mit der Debug-Protokollierung ausführen, werden Fehler im Zusammenhang mit Ruby-Umgebungsvariablen angezeigt.

    Meins kommt sauber hoch. SSH-Debug zeigt eine erfolgreiche Verbindung. Alles, was mit dem Authentifizierungs-Handshaking zu tun hat, ist normal. Dies ist das Ende der Ausgabe:

    debug1: Sending command: git-receive-pack 'username/reponame.git'
    debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
    debug1: channel 0: free: client-session, nchannels 1
    debug1: fd 0 clearing O_NONBLOCK
    debug1: fd 1 clearing O_NONBLOCK
    
  • Probleme mit der Gitlab-Shell-Umgebung.

    Im Gegensatz zu vielen anderen mit derselben Fehlermeldung oben gibt mein gitlab-shell-Überprüfungsskript eine saubere Gesundheitsbescheinigung zurück:

    % sudo -u gitlab -H ~gitlab/gitlab-shell/bin/check   
    Check GitLab API access: OK
    Check directories and files: 
            /var/lib/gitlab/repositories: OK
            /var/lib/gitlab/.ssh/authorized_keys: OK
    Test redis-cli executable: redis-cli 2.8.5
    Send ping to redis server: PONG
    
  • Neustart {Einhorn, Sidekiq, Redis}

    Die Berichte, dass ein Neustart eines oder mehrerer Dienste dies beseitigt, scheinen hier nicht zuzutreffen. Dies ist kein vorübergehendes Problem, das durch das erneute Laden eines Daemons behoben wird.

  • Das Repo wird nicht physisch erstellt

    Aber es ist. Bei jedem ersten Mal wird das Bare-Git-Repo-In ~gitlab/repositories/username/reponame.gitjedes Mal erstellt und scheint die richtigen Berechtigungen zu haben.

  • Gitlab-Shell kann nicht mit dem API-Server kommunizieren, weil A) DNS-Probleme, B) falsche IP- / Port- / Schnittstellenbindung, C) kein / kein abschließender Schrägstrich vorhanden sind.

    Das Überprüfungsskript besagt, dass der API-Zugriff in Ordnung ist.

    Ich verwende kein nginx, daher ist das damit verbundene IP-Bindungsproblem nicht zutreffend.

    Ich habe beides probiert *:8080und 127.0.0.1:8080für den Hörwert in unicorn.yml.

    Darüber hinaus habe ich verschiedene Iterationen von localhost, 127.0.0.1 und dem vollqualifizierten Domain-Namen (DNS-Auflösung in Ordnung) mit und ohne Schrägstriche shell.ymlohne Erfolg ausprobiert. Ich habe auch versucht, dies direkt mit dem Einhorn-Server auf Port 8080 anstelle des Apache SSL / Proxy-Hosts auf Port 80 zu verbinden. Nichts scheint einen Unterschied zu machen. Mein Zertifikat ist nicht selbst signiert und funktioniert für Browser einwandfrei, aber ich habe es self_signed_cert: truetrotzdem versucht . Nichts.

  • Die gemeldeten Git-Pfade sind falsch. Fügen Sie einen vollständig qualifizierten Pfad von der Startseite des Gitlab-Benutzers hinzu.

    Dies scheint ein legitimer Vorschlag zu sein, wenn die Gitlab-Shell dies nicht bereits korrigiert, aber ich habe erfolglos versucht, git remote add origin gitlab@server:username/reponame.gitzu "git remote add origin gitlab @ server: repositories / username / reponame.git" zu wechseln. Gleicher Fehler.

Dies scheint die Litanei der vorgeschlagenen Lösungen zu sein, aber keine davon scheint richtig zu sein. Hinweis: Ich kann über http pushen. Die Anmeldeaufforderung akzeptiert meinen ldap-Benutzernamen und mein Passwort und akzeptiert einen Push. Dies ist nur ein Problem bei der Verwendung von SSH. Das Testen nur des SSH-Login-Teils mit ssh -T gitlab@serverfunktioniert einwandfrei.

Was könnte diesen Fehler sonst noch verursachen?

Wie geht man beim Debuggen eines solchen Problems in gitlab vor? Es scheint überhaupt nichts Relevantes in ~gitlab/gitlab-shell/gitlab-shell.log. Wo wäre eine aussagekräftigere Fehlermeldung zu finden?

Caleb
quelle
Was ist die Ausgabe von: "ssh -vv gitlab @ server"?
DrGkill
@ DrGkill Nichts interessantes (für meine Augen), seht selbst .
Caleb
Prüfen Sie in Ihrer sshd_config, ob gitlab für die externe Anmeldung zugelassen ist. Ich würde sagen, 2 mögliche Schuldige: SSH oder Gitlab-Shell. Was sagt auth.log, wenn sich gitlab verbindet?
DrGkill
@DrGkill Ich habe das überprüft (und wenn keine externe Anmeldung per sshd oder pam erlaubt wäre, hätten die oben gezeigten Protokolle keine erfolgreiche Authentifizierungsbenachrichtigung angezeigt). SSH verbindet sich gut. Die serverseitigen Protokolle zeigen eine erfolgreiche Authentifizierung an, dass eine Sitzung geöffnet wurde, einige systembezogene Informationen zum Einrichten der Benutzerumgebung, dann "Verbindung zu <Remote-IP> getrennt" und einige weitere Informationen zum Bereinigen der Sitzung.
Caleb

Antworten:

7

Ich bin mir ziemlich sicher, dass Sie aufgrund dieser SSH-Debug-Meldung ein Konfigurationsproblem zwischen SSH und dem System haben:

client_input_channel_req: channel 0 rtype [email protected] reply 0

Sie erhalten diese Nachricht sofort nach einer erfolgreichen Authentifizierung und keine Nachricht von bash, was bedeutet, dass nach der Anmeldung kein Programm gestartet wurde.

Beobachten Sie in Ihrer passwd-Datei, ob Sie die richtigen Einstellungen für den gitlab-Benutzer haben:

gitlab:x:1011:1012:GitLab,,,:/path/to/gitlab:/bin/bash

Stellen Sie sicher, dass bash in Konfigurationsdateien wie

  • bash.bashrc
  • .Profil
  • .bashrc

Gehen Sie dann zur nächsthöheren Ebene: Gitlab-Shell Überprüfen Sie, ob /path/to/gitlab/.ssh/authorized_keys die folgende Konfiguration hat:

command="/path/to/gitlab/gitlab-shell/bin/gitlab-shell key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa A...

mit / path / to / gitlab / gitlab-shell / bin / gitlab-shell, die dem gitlab-Benutzer gehört und ausführbar ist.

Sie können sicher sein, dass gitlab-shell voll funktionsfähig ist, indem Sie den folgenden Befehl ausführen:

# /path/to/gitlab-shell/bin/gitlab-shell
Welcome to GitLab, Anonymous!

Wenn die Remote-Anmeldung tatsächlich funktioniert und ordnungsgemäß mit der Gitlab-Shell verbunden ist, sollten Sie dieselbe Begrüßungsnachricht erhalten (die jedoch mit dem Benutzer übereinstimmt, dessen SSH-Schlüssel Sie zum Anmelden verwendet haben), bevor Sie beim Versuch, sich remote anzumelden, abgewiesen werden.

$ ssh gitlab@server
Welcome to GitLab, <your user's full name>!
Connection to <server> closed.

Keine Nachricht hier weist wahrscheinlich darauf hin, dass ssh Sie überhaupt nicht mit gitlab verbindet.

Überprüfen Sie abschließend Ihre Gitlab-Shell-Konfiguration (config.yml) und überprüfen Sie, ob:

http_settings:
    # trailing slash is important
    gitlab_url: "https://remote_server/"
    ca_file: /path/to/webserver/certificate.crt

und schließlich :

    self_signed_cert: false
DrGkill
quelle
Doh. <head-desk> Sie waren die ganze Zeit auf dem richtigen Weg. Der gitlab-Benutzer wurde zugewiesen /bin/false. Entweder hat das Arch-Paket die Shell beim Hinzufügen dieses Benutzers nicht richtig eingestellt, oder ich habe sie während des Implementierens der LDAP-Authentifizierung auf diesem System beschädigt. Vielen Dank für die Mühe.
Caleb
ty for answer, hat mir beim Debuggen geholfen. Ein weiteres Problem ist, dass Sie bei aktivierter SSH-Schlüsselweiterleitung den falschen Schlüssel an gitlab senden, der Sie nicht identifizieren kann. Wenn Sie sich in gitlab einloggen, erhalten Sie auch Welcome Anonymous. Nur deaktivieren Taste Weiterleitung auf Ihrem jumpserver mit ssh -a
tommics
Ich hatte das gleiche Problem wie Caleb, und ich stellte auch selbst fest, dass man anstelle von / bin / {false, true, nologin} eine Shell setzen muss, damit es funktioniert. Tatsächlich wird der Benutzer jedoch während der Installation absichtlich ohne Shell erstellt (siehe: gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/… ) sudo adduser --disabled-login --gecos 'GitLab' git. Also sollte es ohne Shell funktionieren. Ich suche noch nach einer anderen Lösung.
Huygens
0

Ich hatte das gleiche Problem und nach Tagen des Googelns und Durchsuchens von Stack Overflow fand ich endlich mein Problem. Ich wollte dies schriftlich mit Gitlab in Verbindung bringen, nur für den Fall, dass jemand anderes das gleiche Problem hatte.

Ich habe meine Lösung hier gefunden: /programming/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

Ich arbeite unter Windows und das Problem war, dass Git Bash versuchte, seinen SSH-Schlüssel von plink.exe abzurufen, das mit Putty installiert wurde.

Die Lösung bestand darin, die Umgebungsvariable GIT_SSH zu löschen. Dann hat alles geklappt.

Hoffe das hilft jemandem da draußen.

AllanT
quelle