Я знаю, я відповідаю на це дуже пізно і навіть StackOverflow підтвердив, якщо я дійсно хочу відповісти. Я відповідаю, бо ніхто фактично не описував актуальну проблему, тому не хотів поділитися тією ж.
Основи
Спочатку зрозумійте, що тут віддалене. Віддалене - це GitLab, а ваша система - локальна, тому коли ми говоримо про віддалений origin
, незалежно від того, яка URL-адреса встановлена у вашому git remote -v
виході, це ваша віддалена URL-адреса.
Протоколи
В основному, Git клон / push / pull працює в основному за двома різними протоколами (є й інші) -
- Протокол HTTP
- SSH протокол
Коли ви клонуєте РЕПО (або зміните віддалену URL-адресу) і використовуєте URL-адресу HTTPs, наприклад https://gitlab.com/wizpanda/backend-app.git, тоді він використовує перший протокол, тобто протокол HTTP.
Якщо ви клонуєте РЕПО (або зміните віддалену URL-адресу) і використовуєте URL-адресу, як-от git@gitlab.com:wizpanda/backend-app.git
тоді він використовує протокол SSH.
Протокол HTTP
У цьому протоколі кожна віддалена операція, тобто клонування, push & pull, використовує просту аутентифікацію, тобто ім'я користувача та пароль вашого віддаленого пристрою (GitLab у цьому випадку), що означає для кожної операції, ви повинні ввести своє ім’я користувача та пароль, які можуть бути громіздкими. .
Отже, коли ви натискаєте / витягуєте / клонуєте, GitLab / GitHub засвідчує вас своїм іменем користувача та паролем, і це дозволяє вам робити операцію.
Якщо ви хочете спробувати це, ви можете переключитися на HTTP URL, запустивши команду git remote set-url origin <http-git-url>
.
Щоб уникнути цього випадку, ви можете використовувати протокол SSH.
Протокол SSH
Просте з'єднання SSH працює на парах публічно-приватних ключів. Тож у вашому випадку GitLab не може перевірити вас автентифікацією, оскільки ви використовуєте SSH URL для спілкування. Тепер 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