Wiem, odpowiadam bardzo późno i nawet StackOverflow potwierdził, czy naprawdę chcę odpowiedzieć. Odpowiadam, ponieważ nikt tak naprawdę nie opisał rzeczywistego problemu, więc chciałem podzielić się tym samym.
Podstawy
Po pierwsze, zrozum, co jest tutaj pilotem. Zdalny to GitLab, a twój system jest lokalny, więc kiedy mówimy o zdalnym origin
, dowolny adres URL ustawiony w wynikach git remote -v
jest twoim zdalnym adresem URL.
Protokoły
Zasadniczo Git clone / push / pull działa głównie na dwóch różnych protokołach (są też inne) -
- Protokół HTTP
- Protokół SSH
Kiedy klonujesz repozytorium (lub zmieniasz zdalny adres URL) i używasz adresu URL HTTPs, takiego jak https://gitlab.com/wizpanda/backend-app.git to używa pierwszego protokołu, tj. Protokołu HTTP.
Jeśli sklonujesz repozytorium (lub zmienisz zdalny adres URL) i użyjesz adresu URL, takiego jak git@gitlab.com:wizpanda/backend-app.git
wtedy, używa protokołu SSH.
Protokół HTTP
W tym protokole każda zdalna operacja, tj. Klonowanie, wypychanie i ściąganie, wykorzystuje proste uwierzytelnianie, tj. Nazwę użytkownika i hasło pilota (w tym przypadku GitLab), co oznacza, że dla każdej operacji musisz wpisać swoją nazwę użytkownika i hasło, które mogą być uciążliwe .
Więc kiedy push / pull / clone, GitLab / GitHub uwierzytelnia cię za pomocą twojej nazwy użytkownika i hasła i pozwala ci wykonać operację.
Jeśli chcesz tego spróbować, możesz przełączyć się na adres URL protokołu HTTP, uruchamiając polecenie git remote set-url origin <http-git-url>
.
Aby tego uniknąć, możesz skorzystać z protokołu SSH.
Protokół SSH
Proste połączenie SSH działa na parach kluczy publiczny-prywatny. W twoim przypadku GitLab nie może Cię uwierzytelnić, ponieważ do komunikacji używasz adresu URL SSH. Teraz GitLab musi Cię w jakiś sposób znać. W tym celu musisz utworzyć parę kluczy publiczny-prywatny i przekazać klucz publiczny GitLab.
Teraz, gdy push / pull / clone with GitLab, GIT (wewnętrznie SSH) domyślnie zaoferuje Twój klucz prywatny GitLab i potwierdzi Twoją tożsamość, a następnie GitLab pozwoli Ci wykonać operację.
Nie będę więc powtarzał kroków, które już podał Muhammad, powtórzę je teoretycznie.
- Wygeneruj parę kluczy `ssh-keygen -t rsa -b 2048 -C" Mój wspólny klucz SSH "
- Wygenerowana para kluczy będzie domyślnie
~/.ssh
nazwana id_rsa.pub
(klucz publiczny) i id_rsa
(klucz prywatny).
- Będziesz przechowywać klucz publiczny do swojego konta GitLab (ten sam klucz może być używany na wielu lub dowolnym serwerze / kontach).
- Kiedy klonujesz / push / pull, GIT oferuje twój klucz prywatny.
- GitLab dopasowuje klucz prywatny do twojego klucza publicznego i umożliwia wykonanie.
Porady
Zawsze powinieneś tworzyć silny klucz rsa z co najmniej 2048 bajtami. Więc polecenie może być ssh-keygen -t rsa -b 2048
.
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
Myśl ogólna
Obie metody mają swoje wady i zalety. Po wpisaniu powyższego tekstu poszedłem poszukać więcej na ten temat, ponieważ nigdy czegoś o tym nie czytałem.
Znalazłem ten oficjalny dokument https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols, który mówi o tym więcej. Chodzi mi o to, że czytając błąd i przemyślając błąd, możesz stworzyć własną teorię lub zrozumienie, a następnie porównać z niektórymi wynikami Google, aby rozwiązać problem :)
ssh -vvvv git@gitlab.com
aby sprawdzić, czy odbierze klucz SSH