Gitlab funktioniert nicht mit SSH-Schlüsseln


10

Ich habe Probleme mit Gitlab. Ich habe die folgende Anleitung verwendet, um Gitlab https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md zu installieren und zu konfigurieren . Die Installation schien gut zu laufen. Die Webanwendung scheint gut zu funktionieren. Ich kann jedoch nicht klonen, ziehen, pushen, im Grunde kann ich Gitlab nicht verwenden. Ich habe 403 Fehler mit HTTP gesehen und die Berechtigung wurde verweigert, als versucht wurde, über SSH zu klonen.

Ich habe sichergestellt, dass meine privaten Schlüssel sowohl unter Windows als auch unter OS X korrekt eingerichtet sind. Ich kann die öffentlichen Schlüssel auf dem Server sehen. Ich habe meiner Konfigurationsdatei in ~ / .ssh.config Folgendes hinzugefügt

Host {hostname}
    User git
    Hostname {hostname}
    PreferredAuthentications publickey
    IdentityFile C:/Users/{username}/.ssh/id_rsa

Das sehe ich in / var / log / Secure

Jan 14 17:31:48 dev_version_control sshd[3696]: Connection closed by 192.168.17.113
Jan 14 17:32:18 dev_version_control sshd[3700]: Connection closed by 192.168.17.113

Das /var/log/messagehat keine Rolle gespielt, als ich versucht habe, git oder ssh zu verwenden

Ich bin mir nicht sicher, wohin ich von hier aus gehen soll. Irgendwelche Vorschläge?

Ich weiß nicht, was Sie mit SSH unter Verwendung des Git-Benutzernamens meinen. In dem von mir verwendeten Handbuch wurde kein Kennwort für den Git-Benutzer erstellt und angegeben, dass der Benutzer nicht zum Anmelden verwendet werden kann.


Können Sie als Benutzer 'git' SSH an den Git-Server senden? Können Sie versuchen, den Parameter '-vvv' hinzuzufügen, um weitere Informationen darüber zu erhalten, warum die Verbindung geschlossen wird? Es kann sich auch lohnen, die Dateien / var / log / secure und / var / log / messages zu überprüfen, um festzustellen, ob dort Fehler vorliegen.
Jaseeey

Öffentliche Schlüssel sind auf dem Client nicht eingerichtet. Sie müssen sicherstellen, dass sich Ihre privaten Schlüssel auf Ihrem Client befinden. Öffentliche Schlüssel werden auf dem Server gespeichert.
EEAA

Meine Frage wurde aktualisiert. Hoffentlich hilft das
Greyfox

Antworten:


10

Vorausgesetzt, Sie haben Ihren privaten Schlüssel auf Ihren Client geladen, scheint dies ein Berechtigungsproblem für das Benutzerverzeichnis 'git' und das Verzeichnis .ssh zu sein.

Bitte versuchen Sie, Ihr Verzeichnis / home / git in eine Maske von 0711 zu ändern:

chmod 0711 /home/git

Stellen Sie sicher, dass das Verzeichnis /home/git/.ssh die Maske 0700 hat:

chmod 0700 /home/git/.ssh

Stellen Sie sicher, dass die Datei /home/git/.ssh/authorized_keys eine Maske von 0600 hat:

chmod 0600 /home/git/.ssh/authorized_keys

Ersetzen Sie / home / git durch ein beliebiges Home-Verzeichnis für den Benutzer 'git', sofern dies im Lernprogramm anders war. Wenn es keine Berechtigungen sind, lassen Sie bitte einen Kommentar und wir werden sehen, was sonst das Problem sein könnte.


Das könnte das Problem gewesen sein. Ich bin in der Lage, mit git clone git @ {hostname}: {workspace} / {repository} auf meinem Mac zu klonen. Leider habe ich meinen Windows-Computer bei der Arbeit gelassen, sodass ich ihn morgen ausprobieren muss. Funktioniert die Authentifizierung mit öffentlichem / privatem Schlüssel nicht über HTTP mit Gitlab? Ich hatte den Eindruck, dass Github so arbeitete, aber ich könnte mich irren.
Greyfox

Die Authentifizierung mit öffentlichem / privatem Schlüssel funktioniert nur über SSH. Wenn Sie HTTP verwenden, müssen Sie Ihren Benutzernamen und Ihr Passwort verwenden, um etwas zu tun. Wenn Sie eine neue Version von Git wie v1.8 verwenden, sollten Sie zur Eingabe eines Benutzernamens und eines Kennworts aufgefordert werden. Ältere Versionen von Git tun dies nicht, daher müssen Sie Ihren Benutzernamen und Ihr Passwort inline der Fernbedienung (dh https://username:password@git.server.com/repo.git)
hinzufügen

Ahhhh das macht jetzt viel mehr Sinn. Speichert die GitHub für Windows-App die Anmeldeinformationen? Vielen Dank für die Hilfe!
Greyfox

Ich habe die GitHub-Windows-Anwendung nicht viel verwendet, aber ich denke, aus dem Speicher heraus war beim Öffnen eine Anmeldung erforderlich. Daher würde ich sagen, dass die Zugriffsdaten gespeichert werden, um Ihnen den Schmerz zu ersparen, sie ständig einzugeben.
Jaseeey

1

/home/git/.ssh/authorized_keysStellen Sie sicher, dass Sie nur einen Datensatz für Ihren öffentlichen Schlüssel (der über das Webface importiert wurde) haben und dieser Schlüssel das Präfix und den Titel von gitlab hat. Mit anderen Worten, wenn Sie denselben Schlüssel vor der Installation von gitlab manuell hinzugefügt haben, entfernen Sie ihn.


Sie können dort mehrere Schlüssel haben und Sie können sich anmelden, vorausgesetzt, Ihr privater Schlüssel
stimmt

@ Jason, ich habe gerade bearbeitet, um genauer zu erklären
sinm

Danke, das war es für mich. Ich hatte meinen SSH-Schlüssel manuell eingegeben, bevor ich Gitlab zum Hinzufügen eines Schlüssels verwendete, und die doppelten Schlüssel verursachten Probleme.
6ft Dan

1

Ich würde auch empfehlen zu überprüfen, ob der Benutzer die richtige Berechtigung zum Klonen / Ziehen / Pushen von Gitlab hat. Ich habe einfach zu viel Zeit damit verbracht, ssh / https-Konfigurationen durchzusehen, als der Grund für das Problem darin bestand, dass Benutzer in gitlab nicht über genügend Berechtigungen verfügten ...


1

In meiner Situation habe ich gitlab über FreeBSD-Pakete installiert. Gitlab SSH hat nicht funktioniert. Die Ursache dafür war ein falsches Home-Verzeichnis für git: (vipw)

git:*:211:211::0:0:gitosis user:/usr/local/git:/bin/sh

Ich habe dies geändert in:

git:*:211:211::0:0:gitosis user:/home/git:/bin/sh

1

Dies kann passieren, wenn der Host ein '-' im Namen hat. (Auch wenn dies gemäß RFC 952 legal ist .)

ssh fordert mich zur Eingabe eines Kennworts für jeden Host auf, dessen Name zufällig ein '-' enthält. Dies scheint ein reines Problem beim Parsen von SSH-Konfigurationsdateien zu sein, da das Problem durch Hinzufügen eines Alias ​​zu ~ / .ssh / config (und Verwenden dieses Alias ​​in meinen Git-Remote-URLs) behoben wurde.

Mit anderen Worten, versuchen Sie, Folgendes in Ihr C einzufügen: / Users / {Benutzername} /. Ssh / config

Host {a}
    User git
    Hostname {a-b.domain}
    IdentityFile C:/Users/{username}/.ssh/id_rsa

und wo Sie eine Fernbedienung des Formulars haben

origin  git@a-b.domain:repo-name.git

Entfernen Sie es und fügen Sie es mithilfe des Formulars erneut hinzu

origin  git@a:repo-name.git

1

Wenn Sie Umgebungsvariablen zum Übergeben des Schlüssels verwenden, sollten Sie diese mit base64 codieren. Andernfalls schlagen sie wahrscheinlich fehl, wenn Sie nach Ihrer Passphrase gefragt werden. Dies bedeutet, dass der Schlüssel beschädigt ist. Wenn du siehst:

$ ssh-add <(echo "$SSH_PRIVATE_KEY")
Enter passphrase for /dev/fd/63: ERROR: Job failed: exit code 1

Dann codiert base64 die Variable SSH_PRIVATE_KEY. Wenn Sie unter OS X arbeiten,

cat ~/.ssh/ssh_key_for_project | base64 | pbcopy

verschlüsselt es und kopiert es in Ihre Zwischenablage. Ändern Sie nun die Skriptzeile .gitlab-ci.yml in

- ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)


0

Mein Problem war, dass die von puttygen erstellte und gespeicherte private Schlüsseldatei id_rsa ein anderes Format hat als die von einem Ubuntu-Computer erstellte. Nachdem ich ein Paar Schlüssel von einem Ubuntu-Computer erstellt habe, kopieren Sie diese Dateien zurück auf den Windows-Computer im Ordner% UserProfile% .ssh und fügen Sie den neu generierten öffentlichen Schlüssel zu Gitlab hinzu. Keine Erlaubnis mehr für mich verweigert

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.