Я знаю, я отвечаю на это очень поздно, и даже StackOverflow подтвердил, действительно ли я хочу ответить. Я отвечаю, потому что никто на самом деле не описал реальную проблему, поэтому хотел поделиться тем же.
Основы
Во-первых, поймите, что это за пульт. Remote - это GitLab, и ваша система является локальной, поэтому, когда мы говорим об удаленном origin
, любой URL-адрес, установленный в вашемgit remote -v
выводе, является вашим удаленным URL-адресом.
Протоколы
По сути, Git clone / push / pull работает в основном с двумя разными протоколами (есть и другие) -
- Протокол HTTP
- Протокол SSH
Когда вы клонируете репо (или меняете удаленный URL-адрес) и используете URL-адрес HTTP, например https://gitlab.com/wizpanda/backend-app.git HTTP, тогда он использует первый протокол, то есть протокол HTTP.
Если вы клонируете репо (или меняете удаленный URL-адрес) и используете URL-адрес, как git@gitlab.com:wizpanda/backend-app.git
тогда, он использует протокол SSH.
Протокол HTTP
В этом протоколе каждая удаленная операция, то есть клонирование, push & pull, использует простую аутентификацию, то есть имя пользователя и пароль вашего пульта (в данном случае GitLab), что означает, что для каждой операции вы должны вводить свое имя пользователя и пароль, что может быть громоздким ,
Поэтому, когда вы нажимаете / вытягиваете / клонируете, GitLab / GitHub аутентифицирует вас с вашим именем пользователя и паролем и позволяет вам выполнять операцию.
Если вы хотите попробовать это, вы можете переключиться на URL-адрес HTTP, выполнив команду git remote set-url origin <http-git-url>
.
Чтобы избежать этого, вы можете использовать протокол SSH.
SSH протокол
Простое соединение SSH работает с парами открытого и закрытого ключей. Итак, в вашем случае GitLab не может аутентифицировать вас, потому что вы используете URL-адрес SSH для связи. Теперь GitLab должен знать вас каким-то образом. Для этого вам нужно создать пару открытого и закрытого ключей и передать открытый ключ GitLab.
Теперь, когда вы нажимаете / вытягиваете / клонируете с помощью GitLab, GIT (SSH внутренне) по умолчанию предлагает ваш закрытый ключ GitLab и подтверждает вашу личность, а затем GitLab позволит вам выполнить операцию.
Поэтому я не буду повторять шаги, которые уже даны Мухаммедом, я повторю их теоретически.
- Создайте пару ключей `ssh-keygen -t rsa -b 2048 -C" Мой общий ключ SSH "
- Сгенерированная пара ключей по умолчанию будет иметь
~/.ssh
имя id_rsa.pub
(открытый ключ) и id_rsa
(закрытый ключ).
- Вы сохраните открытый ключ для своей учетной записи GitLab (один и тот же ключ можно использовать на нескольких или любых серверах / учетных записях).
- Когда вы клонируете / нажимаете / вытягиваете, GIT предлагает ваш закрытый ключ.
- GitLab сопоставляет закрытый ключ с вашим открытым ключом и позволяет вам выполнять.
подсказки
Всегда следует создавать надежный ключ rsa длиной не менее 2048 байтов. Так что команда может быть ssh-keygen -t rsa -b 2048
.
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
Общая мысль
У обоих подходов есть свои плюсы и минусы. После того, как я набрал приведенный выше текст, я пошел искать больше об этом, потому что я никогда ничего об этом не читал.
Я нашел этот официальный документ https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols, который рассказывает об этом больше. Я хочу сказать, что, прочитав ошибку и подумав об ошибке, вы можете составить свою собственную теорию или понимание, а затем сопоставить с некоторыми результатами Google, чтобы исправить проблему :)
ssh -vvvv git@gitlab.com
посмотреть, подберет ли он SSH-ключ