Отримання дозволу (відкритий ключ) в gitlab


134

Моя проблема полягає в тому, що я не можу натиснути або отримати з GitLab. Однак я можу клонуватись (через HTTP або через SSH). Я отримую цю помилку, коли намагаюся натиснути:

Дозвіл відхилено (publickey) фатально: Не вдалося прочитати з віддаленого сховища

З усіх потоків, які я подивився, ось що я зробив:

  • Налаштуйте ключ SSH на моєму комп’ютері та додайте відкритий ключ до GitLab
  • Виконано config --global для імені користувача та електронної пошти
  • Клоновано через SSH та HTTP, щоб перевірити, чи не вирішить це проблему
  • Виконано команду ssh -T git@gitlab.com

Якщо у вас є розуміння, як вирішити мою проблему, будемо дуже вдячні.


5
біжіть, ssh -vvvv git@gitlab.comчи не забирає він ключ SSH
Нілс Вернер

1
Ви додали ключ SSH через gitlab.com/profile/keys ?
Akram Fares

@ Nils Werner: Коли я виконую цю команду, у мене з’являється багато рядків, але один із них - «Аутентифікація вдалася (publickey)»
Олександр Фернандес Бартоломей

4
переконайтеся, що ви не працюєте sudo git clone git@gitlab.com:project/somethiing.git, інакше ssh /root/.ssh~/.ssh/id_rsa
загляне

1
Я вирішив ту саму проблему, додавши ключ до агента через "ssh-add ~ / .ssh / the_key" з подальшим авторизацією клавіш за фразою. Це приватна частина того, що я додав до GitLab.
Celdor

Відповіді:


259

Я виявив це, багато шукаючи. Це буде прекрасно працювати для мене.

  1. Перейдіть до "Git Bash" так само, як і cmd. Клацніть правою кнопкою миші та «Запустити як адміністратор».
  2. Тип ssh-keygen
  3. Натисніть Enter.
  4. Він попросить вас зберегти ключ у конкретній директорії.
  5. Натисніть Enter. Він запропонує ввести пароль або ввести без пароля.
  6. Відкритий ключ буде створений для конкретного каталогу.
  7. Тепер перейдіть до каталогу та відкрийте .sshпапку.
  8. Ви побачите файл id_rsa.pub. Відкрийте його на блокноті. Скопіюйте з нього весь текст.
  9. Перейдіть на сторінку https://gitlab.com/profile/keys .
  10. Вставте сюди в текстове поле "ключ".
  11. Тепер натисніть на "Заголовок" нижче. Він автоматично заповниться.
  12. Потім натисніть «Додати ключ».

Тепер дайте йому постріл, і це спрацює точно.


2
У випадку, якщо ви загубитесь при копіюванні паб-файлу в буфер обміну. спробуйте наступне:type %userprofile%\.ssh\id_rsa.pub | clip
jquijano

5
у Windows 10, якщо вам потрібно знайти .ssh \ id_rsa.pub, ви можете ввести цього кота ~ / .ssh / id_rsa.pub на git bash, він покаже вам "ключ", щоб ви могли скопіювати та вставити його в текстове поле in gitlab.com/profile/keys
Chutipong Roobklom

11
Переконайтесь у цьому: ssh-add filename(з-за шляху, якщо не в rsa dir), виконайте
вказані

3
Я зробив це, проблема не виправлена, забороняється отримати дозволи
Billal Begueradj

. Працював як шарм. Дякую!
RafiAlhamd

62

Крок 1. Додано файл конфігурації у ~/.ssh/configфайл, який виглядає так

   User git
   Hostname gitlab.com
   IdentityFile ~/.ssh/id_rsa_gitlab
   TCPKeepAlive yes
   IdentitiesOnly yes

Крок 2: Просто клонуйте git repo БЕЗ судо.
Документація: https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths


1
Це потрібно, якщо файл-ключ із іменем за замовчуванням вже використовується для різних цілей. Якщо ви створюєте файл-ключ з іменем, що не використовується за замовчуванням, як id_rsa_gitlabу прикладі Fedo, вам потрібно буде надати файл конфігурації. Приємна стаття Gitlab з цього питання: gitlab.com/help/ssh/…
Dany

Це працювало для мене. У мене були і ключі Github & Gitlab, так що ви вирішили це рішення.
М.Куш

Я повинен змінитись, Hostnameщоб Hostзробити це працюючим
Саді

27

Я думаю, що найпростішим рішенням є додати приватний ключ до агента аутентифікації (якщо ваш ключ немає ~/.ssh/id_rsa),

ssh-add ~/.ssh/<your private key>

Ви в основному пускаєте ssh-agent подбати про це.

Крім того, ви можете додати його назавжди .


це файл з розширенням .pub
Феліпе

7
Ні. Приватний ключ - це файл без .pubрозширення.
Хуссей

15

У моєму випадку він не працював у WSL (підсистема Windows для Linux).

Коли я запускаю WSL, я повинен

  • запустити ssh-agent_ eval $(ssh-agent -s)
  • додати ключ до ssh-агента: ssh-add ~/.ssh/id_rsa
  • за запитом введіть пароль

Зараз з'єднання працює.
Ми можемо перевірити це за допомогоюssh -T git@github.com

примітки:


11

переконайтеся, що ви не запущені sudo git clone git@gitlab.com:project/somethiing.git, інакше ssh буде шукати /root/.sshзамість завантаженого вами ключа~/.ssh/id_rsa


10

Для цього є дуже просте рішення: замість роботи з ssh - переходите до https. зробити це: у папці проекту у вас папка .git - у вас є файл конфігурації - відкрийте його в текстовому редакторі та змініть рядок

url =git@gitlab.com: ваше ім’я / yourproject.git

до

url = https://gitlab.com/yourname/yourproject.git


Дякую. Працювали для мене.
ktv6

7

якщо ви в Linux або macox, просто спробуйте це в терміналі:

ssh-add -l

якщо нічого не повертається, спробуйте це:

ssh-add

він повинен створити ідентичність у ~ / .ssh / id_rsa

після повторного спроби:

ssh-add -l

він повинен повернути вашу особу, тож після повторного клонування він повинен працювати

Примітка: не забудьте додати свій ssh ​​ключ у свій профіль gitlab

Дякую


5

У моєму випадку це була не проблема gitlab, а конфігурація sshd. Ssh-сервер не дозволяв з'єднання, крім списку користувачів. Користувач git, який віддалено підключається до gitlab, не був у цьому списку. Отже, перевірте це перед чим-небудь іншим.

Ви можете перевірити конфігурацію свого ssh-сервера /etc/ssh/sshd_config. Якщо у вас є рядок з опцією AllowUsers, додайте до неї git:

AllowUsers user1 user2 user3 git

3

У мене gitlab працює з docker, це те, що я зробив, щоб виправити свою проблему.

Виявлено, що всередині docker / var / log / gitlab / sshd / current було декілька випадків повідомлення:

Відхилена автентифікація: неправильне право власності або режими для файлу /var/opt/gitlab/.ssh/authorized_keys

Після цього я змінив право власності на цей файл з 99: користувачів на git: користувачів з:

chown git: користувачі санкціоновані_кізі


1
Дуже дякую. У мене запущений Gitlab в Kubernetes, і в каталозі / gitlab-data (який також є точкою кріплення для санкціонованих_кілів) були проблеми з дозволом. Досить простого хауна.
Діллен Мейджбом

3

Крок, який потрібно зробити, отримав таку ж помилку, але я її виправив. Gitlab хоче ssh-rsa, тому нижче - код для запуску ssh для rsa

  1. ssh-keygen -o -t rsa -b 4096 -C "name@gmail.com"

name@gmail.com - це електронна адреса вашого облікового запису gitlab

  1. Він запропонує вам ввести, так що просто натисніть клавішу Enter після того, як наведений нижче код підкаже,

    Введіть файл, у якому потрібно зберегти ключ (/home/yourDesktopName/.ssh/id_rsa):

  2. Він знову запропонує вам ввести, так що просто натисніть Enter після введення нижче коду,

    Введіть пароль (порожній для без парольної фрази):

  3. Знову буде запропоновано останній, який ви введете, тому просто натисніть клавішу Enter після того, як буде запропоновано вказаний нижче код,

    Знову введіть ту ж парольну фразу:

  4. Ви покажете свій генератор ssh-rsa.

  5. Увійдіть до свого акаунта Gitlab та перейдіть до правого навбар, ви отримаєте налаштування, а в лівій бічній панелі ви отримаєте ключ ssh. Введіть у нього.

  6. Подивіться вище підказки з проханням увійти, ви отримаєте шлях ssh-rsa.

  7. Перейдіть у свою папку SSH та отримайте id_rsa.pub

  8. Відкрийте його і дістаньте ключ та скопіюйте вставити в Gitlab, і ви вже майже готові.

  9. Перевірити: ssh -T git@gitlab.com

  10. Ти отримаєш: Welcome to GitLab, @joy4!

  11. Зроблено.


Дякую. це працює на Windows 10. Я спробував ed25519 як інструкція gitlab, але не працює.
Діка

Ця відповідь досить гарна - не впевнений, чому її не проголосували вище.
mgibson

3

Раніше мені було дуже важко, але коли я спробував, стало так просто додати ssh ключ у Mac та Linux. Для цього необхідно виконати кілька кроків:

  1. Відкрийте термінал вашої системи та перемістіть всередині свого каталогу проекту за допомогою команди:
cd 'project directory name'
  1. Запустіть команду ssh-keygenв цьому терміналі і введіть її, поки там не з’явиться випадкове зображення ключа.

  2. Потім введіть ще одну команду в цей термінал:

cat ~/.ssh/id_rsa.pub

Це створить ваш ключ ssh. Ключ розпочнеться ssh-rsaі закінчиться .local.

  1. Скопіюйте ключ і перейдіть до розділу профілю Gitlab, а потім ssh keyвставте його. Натисніть на Addкнопку, це спрацює.

це працювало для мене! спасибі
Шамсейер Ахаммед

2

У мене була та сама проблема, і я вирішив її, додавши новий ключ ssh:

  1. ssh-keygen -t ed25519 -C "email@example.com"
  2. Скопіюйте свій відкритий ключ SSH у буфер обміну (xclip -sel clip < ~/.ssh/id_ed25519.pub у моєму випадку на Linux)
  3. У gitlab перейдіть до settings=>sshклавіш та вставте новий ключ

2

Коли у вас є кілька облікових записів git і ви хочете отримати інший ключ ssh

Вам потрібно виконати той же крок, щоб створити ключ ssh, але будьте впевнені

ssh-keygen -t ed25519 -C "your-email-id@gmail.com" 

Введіть шлях, який ви хочете зберегти (напр .: my-pc / Desktop / .ssh / ed25519)

Додайте відкритий ключ до свого gitlab ( Як додати ключ ssh до gitlab )

Ви повинні новий ідентифікатор ssh за допомогою команди com

ssh-add ~/my-pc/Desktop/.ssh/ed25519

2

Дві речі в основному

  1. У папці .ssh (яка повинна бути у вашій домашній папці. Ви повинні мати id_rsa.pub та id_rsa (приватні) ключі), які повинні бути у вашій домашній папці. Це не працює, якщо ви назвали свої ключові файли по-іншому

  2. Змініть дозвіл id_rsa як chmod 400 ~ / .ssh / id_rsa


2

Інша проблема, яка може спричинити таку поведінку, полягає в тому, що у вас налаштування з 2 можливими% HOME% -локаціями.

Я використовую ПК, де частина моїх документів зберігається локально, а частина - на мережевому диску. Деякі програми вважають, що C:\Users\<MyUserName>\це моє %home%, інші вважають, що U:\це дім.

Виявляється, ssh-keygenпідкладіть мій приватний ключ C:\users\<MyUserName>\, і це, ssh -Tі ssh -vтам також подивіться.

Тому все, здається, працює нормально, крім цього git clone, git pushа інші шукають ключU:\ . Що не вдається, тому я отримую вищезгадану помилку.

На це знадобилася година, щоб дізнатися, але врешті-решт рішення було простим: я скопіював все з C:\Users\<MyUserName>\.sshнаU:\.ssh


1

Я вирішив так.

Створив ключ для Windows за допомогою цієї команди:

ssh-keygen -t rsa -C "your.email@example.com" -b 4096

але проблема полягала в тому, що після запуску цієї команди він вискочив рядок: "Введіть файл, в якому зберегти ключ (/c/Users/xxx/.ssh/id_rsa):" Тут я давав лише ім'я файлу, через що мій ключ був збережений у моєму pwd, а не у вказаному місці. Коли я робив "git clone", він припускав, що ключ знаходиться у "/c/Users/xxx/.ssh/id_rsa", але його не знайдено, отже, це була помилка кидання.

На момент генерації ключа було створено 2 файли, які говорять "file1" & "file1.pub". Я перейменував обидва ці файли у

file1 -> id_rsa 

і

file1.pub -> id_rsa.pub

і розміщені як у місці розташування "/c/Users/xxx/.ssh/"


1

Перейдіть до терміналу і знову відновіть ключ ssh. Тип ssh-keygen . Він запитає, де ви хочете його зберегти, введіть шлях.

Потім скопіюйте відкритий ключ на платформу gitlabs. Зазвичай починається з ssh-rsa.


1

Проблема для мене було те , що я перейшов UsePAMз yesдо noв файлі конфігурації SSH під /etc/ssh/sshd_config. З UsePAM yesусім працює чудово.


1

Я знайшов рішення в довідці з gitlab .

To create a new SSH key pair: 
 1. Open a terminal on Linux or macOS, or Git Bash / WSL on Windows.
 2. Generate a new ED25519 SSH key pair: ssh-keygen -t ed25519 -C "email@example.com"
 2.1 Or, if you want to use RSA: ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
 3. Next, you will be prompted to input a file path to save your SSH key pair to... use the suggested path by pressing Enter
 4. Once the path is decided, you will be prompted to input a password to secure your new SSH key pair. It's a best practice to use a password, but it's not required and you can skip creating it by pressing Enter twice.
 5. Copy your public SSH key to the clipboard by using one of the commands below depending on your Operating System:
        macOS:        pbcopy < ~/.ssh/id_ed25519.pub
        WSL / GNU/Linux (requires the xclip package):      xclip -sel clip < ~/.ssh/id_ed25519.pub
        Git Bash on Windows:      cat ~/.ssh/id_ed25519.pub | clip
 6. Navigating to SSH Keys and pasting your public key in the Key field
 7. Click the Add key button

Я сподіваюся, що це може допомогти комусь із вас!


1

Як додати ключ SSH до облікового запису gitlab в ubuntu?

  1. Відкрийте термінал у своєму каталозі проектів.
  2. Введіть 'ssh-keygen -o -t rsa -b 4096 -C "ваш електронний лист" і натисніть клавішу Enter
  3. Введіть 'vim /home/mnbtech/.ssh/id_rsa.pub' та натисніть клавішу Enter (або відкрийте вручну "id_rsa.pub'from, звідки ви його зберегли)"
  4. З'явиться ключ SSH. Скопіюйте ті і

  5. Перейдіть на свій рахунок gitlab.

  6. Клацніть зображення профілю та натисніть налаштування
  7. У лівій частині виберіть SSH-ключі
  8. Потім вставте цю клавішу Натисніть кнопку "Додати"

SSH-ключ буде доданий!

(Зверніть увагу: якщо у вас створено SSH-ключ попереднього перегляду та отримання дозволу відмовлено (відкритий ключ). Ви видалите ssh-ключ свого попереднього перегляду та створіть новий і додасте git user.name та електронну пошту у свій термінал)


Що відрізняється у цій відповіді, ніж у попередніх інструкціях?
РальфФрідл

1

Я вирішив git@gitlab.com: Permission denied (publickey)проблему, використовуючи наступні вказівки

  1. РУН cat ~/.ssh/id_rsa.pub
  2. Скопіюйте id_rsa.pub(відкритий ключ) у ваш getlab `Налаштування -> Ключі SSH
  3. РУН cat ~/.ssh/id_rsa
  4. Скопіюйте id_rsa(приватний ключ) у `Code_repo-> git_auth-> id_rsa

ПРИМІТКА. Потурбуйтеся про користувача машини, якщо ви використовуєте rootкористувача в DockerFile або в іншому місці, а потім використовуйте sudo suперед запуском вищезазначених команд, щоб отримати відкриті та приватні ключі користувача root.


1

У нашому випадку це було не проблемою на стороні користувача / клієнта, а на стороні сервера Gitlab.

Ми використовуємо локальний екземпляр Gitlab CE 12.9 на CentOS 7.1.

Ми з’ясували, що на сервері файл .ssh / pooblasti_keys не оновлювався належним чином. Користувачі створюють свої SSH ключі (слідуючи керівництву Gitlab) та додаючи їх на сервер Gitlab, але сервер не оновлює дозволені_кільки , тому це завжди призведе до помилок, відхилених у дозволі.

Вирішення проблеми полягало в тому, щоб відновити файл санкціонованих ключів шляхом запуску:

$ sudo gitlab-rake gitlab:shell:setup

Це спрацювало б для кожного, хто додав свої ключі перед виконанням завдання граблі. Для наступних користувачів, які додали б свої ключі, хтось повинен знову вручну виконувати завдання граблі.

Більш постійним рішенням було не використовувати файл санкціонованих_кілей та використовувати замість нього індексований пошук у базі даних Gitlab :

GitLab Shell надає спосіб авторизувати користувачів SSH за допомогою швидкого індексованого пошуку до бази даних GitLab. GitLab Shell використовує відбиток ключа SSH, щоб перевірити, чи має право користувач отримати доступ до GitLab.

Додайте у sshd_configфайл наступне . Зазвичай він розташований за адресою /etc/ssh/sshd_config, але це буде, /assets/sshd_configякщо ви використовуєте Doni Omnibus:

Match User git    # Apply the AuthorizedKeysCommands to the git user only   
  AuthorizedKeysCommand /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell-authorized-keys-check git %u %k   
  AuthorizedKeysCommandUser git 
Match all    # End match, settings apply to all users again 

Перезавантажити OpenSSH:

# Debian or Ubuntu installations   
sudo service ssh reload

# CentOS installations   
sudo service sshd reload 

Підтвердьте, що SSH працює, видаливши ключ користувача SSH в інтерфейсі користувача, додавши новий та спробуй витягнути репо.

За замовчуванням (добре за замовчуванням у нашій установці), файл Записати до авторизованих_кілів перевірявся в області адміністратора> Налаштування оптимізації продуктивності . Тож ми це скасували і замість цього використали базу даних Gitlab.

введіть тут опис зображення

Після налаштування індексованого пошуку та зняття галочки з файла Записати в авторизовані_кільки , доступ до SSH став нормальним.


1

Для всіх, хто використовує Windows 10 і нічого іншого, що працює для нього:

У моєму випадку мені довелося клонувати репо з https замість ssh та спливаючого вікна з проханням отримати свої облікові дані. Після цього все працює добре.


1

Я знаю, я відповідаю на це дуже пізно і навіть StackOverflow підтвердив, якщо я дійсно хочу відповісти. Я відповідаю, бо ніхто фактично не описував актуальну проблему, тому не хотів поділитися тією ж.

Основи

Спочатку зрозумійте, що тут віддалене. Віддалене - це GitLab, а ваша система - локальна, тому коли ми говоримо про віддалений origin, незалежно від того, яка URL-адреса встановлена ​​у вашому git remote -vвиході, це ваша віддалена URL-адреса.

Протоколи

В основному, Git клон / push / pull працює в основному за двома різними протоколами (є й інші) -

  1. Протокол HTTP
  2. 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 дозволить вам виконати операцію.

Тому я не повторюю кроки, які вже дав Мухаммед, я повторю їх теоретично.

  1. Створіть пару ключів `ssh-keygen -t rsa -b 2048 -C" Мій загальний ключ SSH "
  2. Згенерована пара ключів буде за замовчуванням у ~/.sshназваних id_rsa.pub(відкритий ключ) та id_rsa(приватний ключ).
  3. Ви зберігатимете відкритий ключ у своєму акаунті GitLab (той самий ключ можна використовувати у кількох або будь-яких серверах / облікових записах).
  4. Коли ви клонуєте / натискаєте / витягуєте, GIT пропонує ваш приватний ключ.
  5. 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, щоб виправити проблему :)



0

Я використовую ubuntu 18.04, і це фактично було дозволом на моїй локальній машині. Проблему не було, коли я встановив дозвіл на читання / запис у свою папку .git.


0

Ну, у мене була ця сама проблема, і, спробувавши відповідь, запропонував Хан. Однак мені вдалося змусити його лише змінити початковий URL у файлі .git / config на https-адресу: https://gitlab.com/mygitlabusername/mygitproject.git

Оскільки доступ через ssh заборонений, я зрозумів, що використання https не повинно бути проблемою. Однак він запитає ваше ім'я користувача та пароль для кожного натискання на сховище


0

Будь ласка, використовуйте, git config credential.helper storeякщо ваш сайт використовує TLS / SSL. Сподіваюся, це працює


0

Здається, існують відмінності між двома способами доступу до сховища git, тобто використанням SSH або HTTPS. Для мене я зіткнувся з помилкою, оскільки намагався натиснути свій локальний сховище за допомогою SSH.

Проблему можна вирішити просто натиснувши кнопку клонування на цільовій сторінці вашого проекту та скопіювавши посилання HTTPS та замінивши його на посилання SSH, що відображається у форматі "git @ gitlab ...".


Це не відповідає на запитання.
RalfFriedl

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.