Gitlab nie działa z kluczami SSH

11

Mam problemy z Gitlab. Skorzystałem z poniższego przewodnika, aby zainstalować i skonfigurować Gitlab https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md . Instalacja zdawała się iść dobrze. Wygląda na to, że aplikacja internetowa działa dobrze. Jednak nie jestem w stanie klonować, ciągnąć, pchać, w zasadzie nie mogę używać Gitlab. Podczas próby klonowania przez SSH widziałem błędy 403 z HTTP i odmową dostępu.

Upewniłem się, że moje klucze prywatne są poprawnie skonfigurowane zarówno w systemie Windows, jak i OS X. Widzę klucze publiczne na serwerze. Dodałem następujące do mojego pliku konfiguracyjnego w ~ / .ssh.config

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

Oto co widzę w / 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

/var/log/messageNie rolę, gdy próbowałem przy użyciu git lub ssh

Nie jestem pewien, dokąd się udać. Jakieś sugestie?

Nie wiem, co masz na myśli przez SSH przy użyciu nazwy użytkownika git. Przewodnik, którego użyłem, nie utworzył hasła dla użytkownika git i stwierdził, że nie można użyć tego użytkownika do zalogowania się.

greyfox
źródło
Czy jesteś w stanie połączyć się z serwerem Git jako użytkownik „git”? Czy możesz spróbować dodać parametr „-vvv”, aby uzyskać dalsze informacje o tym, dlaczego połączenie jest zamykane? Warto również sprawdzić pliki / var / log / secure i / var / log / messages, aby sprawdzić, czy nie ma tam żadnych błędów.
jaseeey
Klucze publiczne nie są skonfigurowane na kliencie - musisz upewnić się, że klucze prywatne znajdują się na kliencie. Klucze publiczne idą na serwer.
EEAA
Zaktualizowałem moje pytanie. Mam nadzieję, że to pomaga
greyfox

Odpowiedzi:

10

Pod warunkiem, że załadowałeś swój klucz prywatny do klienta, wygląda na to, że może to być problem z uprawnieniami w katalogu osobistym użytkownika „git” i katalogu .ssh.

Spróbuj zmienić katalog / home / git na maskę 0711:

chmod 0711 /home/git

Upewnij się, że katalog /home/git/.ssh ma maskę 0700:

chmod 0700 /home/git/.ssh

Upewnij się, że plik /home/git/.ssh/authorized_keys ma maskę 0600:

chmod 0600 /home/git/.ssh/authorized_keys

Zamień / home / git na dowolny katalog domowy użytkownika „git”, jeśli w samouczku było inaczej. Jeśli to nie są uprawnienia, prosimy o komentarz, a my zobaczymy, co jeszcze może być przyczyną problemu.

jaseeey
źródło
To mógł być problem. Wiem, że mogę klonować za pomocą git clone git @ {nazwa hosta}: {workspace} / {repository} na moim komputerze Mac. Niestety zostawiłem maszynę z systemem Windows w pracy, więc jutro będę musiał spróbować. Czy uwierzytelnianie za pomocą klucza publicznego / prywatnego nie działa przez HTTP z Gitlab? Miałem wrażenie, że tak działał Github, ale mogłem się mylić.
greyfox
Uwierzytelnianie za pomocą klucza publicznego / prywatnego działa tylko przez SSH. Jeśli korzystasz z HTTP, będziesz musiał użyć swojej nazwy użytkownika i hasła, aby cokolwiek zrobić. Jeśli używasz nowej wersji Git, takiej jak v1.8, powinna ona wyświetlać monit o podanie nazwy użytkownika i hasła. Starsze wersje Git tego nie robią, więc musisz dodać nazwę użytkownika i hasło w linii zdalnej (tj. https://username:[email protected]/repo.git)
jaseeey
Ach, to ma teraz o wiele więcej sensu. Czy więc aplikacja GitHub dla Windows przechowuje poświadczenia? Dziękuję bardzo za pomoc!
greyfox
Nie korzystałem często z aplikacji GitHub dla systemu Windows, ale myślę, że z pamięci wymagała zalogowania podczas jej otwierania, więc powiedziałbym, że przechowuje poświadczenia dostępu, aby zaoszczędzić ci bólu podczas ich ciągłego wprowadzania.
jaseeey
1

Sprawdź, czy masz tylko jeden rekord dla klucza publicznego (który został zaimportowany przez stronę internetową), /home/git/.ssh/authorized_keysa ten klucz ma prefiks i tytuł gitlab. Innymi słowy, jeśli ręcznie dodałeś ten sam klucz przed instalacją gitlab, usuń go.

sinm
źródło
Możesz mieć tam wiele kluczy i będziesz mógł się zalogować, pod warunkiem, że twój klucz prywatny może się zgadzać ...
jaseeey
@Jason, właśnie zredagowałem, aby wyjaśnić bardziej precyzyjnie
sinm
Dziękuję, to było dla mnie. Przed dodaniem klucza Gitlab wstawiłem ręcznie mój klucz ssh, a duplikaty kluczy spowodowały problemy.
6 stóp Dan
1

Polecam również sprawdzić, czy użytkownik ma odpowiednie uprawnienia do klonowania / ciągnięcia / wypychania w gitlab. Po prostu spędzam zbyt dużo czasu na przeglądaniu konfiguracji ssh / https, gdy przyczyną problemu był brak wystarczających uprawnień w gitlab ...

sztolik
źródło
1

W mojej sytuacji zainstalowałem gitlab poprzez pakiety FreeBSD. Gitlab SSH nie działał. Przyczyną tego był niewłaściwy katalog domowy git: (vipw)

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

Zmieniłem to na:

git:*:211:211::0:0:gitosis user:/home/git:/bin/sh
gamecreature
źródło
1

Może się to zdarzyć, jeśli host ma w nazwie „-”. (Mimo że jest to zgodne z RFC 952 ).

ssh monituje mnie o podanie hasła dla każdego hosta, który ma w nazwie znak „-”. Wydaje się, że jest to wyłącznie problem z analizowaniem plików konfiguracyjnych ssh, ponieważ dodanie aliasu do ~ / .ssh / config (i użycie tego aliasu w moich zdalnych adresach URL git) rozwiązało problem.

Innymi słowy, spróbuj umieścić coś takiego jak poniżej w swoim C: / Users / {nazwa użytkownika} / .ssh / config

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

i gdzie masz pilota formularza

origin  [email protected]:repo-name.git

usuń go, a następnie ponownie dodaj za pomocą formularza

origin  git@a:repo-name.git
SensorSmith
źródło
1

Jeśli używasz zmiennych środowiskowych do przekazania klucza, powinieneś zakodować je base64, w przeciwnym razie prawdopodobnie nie powiedzie się z powodu błędu z prośbą o podanie hasła. Oznacza to, że klucz jest uszkodzony. Jeśli zobaczysz:

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

Następnie base64 koduje zmienną SSH_PRIVATE_KEY. Jeśli korzystasz z systemu OS X,

cat ~/.ssh/ssh_key_for_project | base64 | pbcopy

zakoduje go i skopiuje do schowka. Teraz zmień wiersz skryptu .gitlab-ci.yml na

- ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)
Jonathan Wilkins
źródło
0

Uruchomienie eval $(ssh-agent)naprawiło mój problem.

Michalzuber
źródło
0

Mój problem polegał na tym, że plik kluczy prywatnych id_rsa utworzony i zapisany przez puttygen ma inny format niż ten utworzony z maszyny Ubuntu. Po utworzeniu pary kluczy z komputera ubuntu skopiuj te pliki z powrotem na komputer z systemem Windows w folderze% UserProfile% .ssh, a następnie dodaj nowy wygenerowany klucz publiczny do Gitlab. Nie odmówiono mi już pozwolenia

Quang Le
źródło