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ę.


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.


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:password@git.server.com/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.


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 ...


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

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  git@a-b.domain:repo-name.git

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

origin  git@a:repo-name.git

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)


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.