Отказано в разрешении (открытый ключ) на gitlab


134

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

Permission denied (publickey) fatal: Не удалось прочитать из удаленного репозитория

Из всех тем, которые я просмотрел, вот что я сделал:

  • Настроить SSH-ключ на моем компьютере и добавить открытый ключ в GitLab
  • Сделал конфиг --global для имени пользователя и электронной почты
  • Клонировано через SSH и HTTP, чтобы проверить, решит ли это проблему
  • Выполнена команда ssh -T git@gitlab.com

Если у вас есть представление о том, как решить мою проблему, мы будем очень признательны.


5
беги ssh -vvvv git@gitlab.comпосмотреть, подберет ли он SSH-ключ
Нильс Вернер

1
Вы добавляли ключ SSH через gitlab.com/profile/keys ?
Акрам Фарес

@ Нильс Вернер: Я получаю много строк, когда выполняю эту команду, но одна из них - «Аутентификация прошла успешно (публичный ключ)»
Александр Фернандес Бартоломеу

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

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

Ответы:


260

Я нашел это после долгих поисков. Для меня это сработает отлично.

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

Теперь попробуйте, и он наверняка сработает.


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

5
в Windows 10, если вам нужно найти .ssh \ id_rsa.pub, вы можете ввести этот cat ~ / .ssh / id_rsa.pub в git bash, он покажет вам «Ключ», чтобы вы могли скопировать и вставить его в текстовое поле в gitlab.com/profile/keys
Chutipong Roobklom

11
Обязательно сделайте это: ssh-add filename(with-path, если не в каталоге rsa) после выполнения вышеуказанных шагов
Blasanka

3
Я сделал это, проблема не устранена, в получении разрешений отказано
Биллал Бегерадж

. Работал как шарм. Спасибо!
RafiAlhamd

62

Шаг 1: Добавлен файл конфигурации в ~/.ssh/configфайл, который выглядит как

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

Шаг 2: Просто клонируйте репозиторий git БЕЗ sudo.
Документация: https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths


1
Это необходимо, если ключевой файл с именем по умолчанию уже используется для разных целей. Если вы создаете ключевой файл с именем, отличным от имени по умолчанию, как id_rsa_gitlabв примере с Fedo, вам нужно будет предоставить файл конфигурации. Хорошая статья Gitlab по этому поводу: gitlab.com/help/ssh/…
Дэни

Это сработало для меня. У меня были ключи Github и Gitlab, так что вы за это решение.
M.Cush 08

Мне нужно изменить Hostnameна, Hostчтобы это работало,
Сэди 08

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

он должен вернуть вашу личность, поэтому после повторной попытки клонирования он должен работать

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

Спасибо


5

В моем случае это была проблема не с gitlab, а с конфигурацией sshd. Сервер ssh не разрешал подключение, кроме списка пользователей. Пользователь git, удаленно подключающийся к gitlab, не был в этом списке. Итак, проверьте это прежде всего.

Вы можете проверить конфигурацию своего ssh-сервера в /etc/ssh/sshd_config. Если у вас есть строка с опцией AllowUsers, добавьте к ней git:

AllowUsers user1 user2 user3 git

3

У меня gitlab работает с докером, это то, что я сделал, чтобы исправить свою проблему.

Обнаружено, что внутри docker / var / log / gitlab / sshd / current было несколько случаев сообщения:

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

После этого я сменил владельца этого файла с 99: users на git: users с:

chown git: пользователи authorized_keys


1
Спасибо большое. Я запускаю Gitlab в Kubernetes, и в каталоге / gitlab-data (который также является точкой монтирования для authorized_keys) возникли проблемы с разрешениями. Достаточно было простого чоуна.
Dillen Meijboom

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

  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, используя команду ниже

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

2

В основном две вещи

  1. У вас должны быть ключи id_rsa.pub и id_rsa (закрытые) в вашей папке .ssh (которая должна быть в вашей домашней папке. Создайте ее, если ее там нет, поместите свои ключи). Это не сработает, если вы по-другому назвали свои ключевые файлы

  2. Измените разрешение id_rsa на chmod 400 ~ / .ssh / id_rsa


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 "ваш адрес электронной почты gitlab" и нажмите Enter.
  3. Введите vim /home/mnbtech/.ssh/id_rsa.pub и нажмите Enter (или вручную откройте свой id_rsa.pub из того места, где вы его сохранили).
  4. Появится ключ SSH. Скопируйте те и

  5. Перейдите в свою учетную запись gitlab.

  6. Щелкните изображение профиля и щелкните параметр
  7. В левой части выберите SSH-ключи
  8. Затем вставьте этот ключ. Нажмите, чтобы добавить ключ.

SSH-ключ будет добавлен!

(NB, если у вас есть SSH-ключ для генерации превью и отказано в получении разрешения (открытый ключ). Вы удаляете ключ SSH для превью, генерируете новый и добавляете git user.name и адрес электронной почты в свой терминал)


Чем этот ответ отличается от предыдущих инструкций?
RalfFriedl

1

Я решил git@gitlab.com: Permission denied (publickey)проблему с помощью следующих инструкций

  1. БЕГАТЬ cat ~/.ssh/id_rsa.pub
  2. Скопируйте id_rsa.pub(открытый ключ) в ваш getlab `Setting -> SSH Keys
  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 / authorized_keys не обновляется должным образом. Пользователи создают свои ключи SSH (следуя руководству Gitlab) и добавляют их на сервер Gitlab, но сервер не обновляет authorized_keys , поэтому это всегда будет приводить к ошибкам отказа в разрешении.

Обходной путь состоял в том, чтобы перестроить файл authorized_keys , запустив:

$ sudo gitlab-rake gitlab:shell:setup

Это сработает для всех, кто добавил свои ключи перед запуском задачи rake. Для следующих пользователей, которые добавят свои ключи, кто-то должен снова вручную запустить задачи с граблями.

Более постоянным решением было не использовать файл authorized_keys и использовать вместо этого индексированный поиск в базе данных Gitlab :

GitLab Shell предоставляет способ авторизации пользователей SSH с помощью быстрого индексированного поиска в базе данных GitLab. GitLab Shell использует отпечаток SSH-ключа, чтобы проверить, авторизован ли пользователь для доступа к GitLab.

Добавьте в свой sshd_configфайл следующее. Обычно он находится по адресу /etc/ssh/sshd_config, но это будет, /assets/sshd_configесли вы используете Omnibus Docker:

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-ключ вашего пользователя в пользовательском интерфейсе, добавив новый и попытавшись получить репо.

По умолчанию (по умолчанию в нашей установке) файл Write to authorized_keys был отмечен в Admin Area> Performance Optimization settings. Поэтому мы сняли этот флажок и вместо этого использовали базу данных Gitlab.

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

После настройки индексированного поиска и снятия флажка « Запись в файл authorized_keys» доступ по SSH стал нормальным.


1

Для тех, кто использует Windows 10 и у него ничего не работает:

В моем случае мне пришлось клонировать репо с https вместо ssh, и появилось окно с запросом моих учетных данных. После этого все работает нормально.


1

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

Основы

Во-первых, поймите, что это за пульт. Remote - это GitLab, и ваша система является локальной, поэтому, когда мы говорим об удаленном origin, любой URL-адрес, установленный в вашемgit remote -v выводе, является вашим удаленным URL-адресом.

Протоколы

По сути, Git clone / push / pull работает в основном с двумя разными протоколами (есть и другие) -

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

Поэтому я не буду повторять шаги, которые уже даны Мухаммедом, я повторю их теоретически.

  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

Ну, у меня была такая же проблема, и после попытки ответа @Khan предложил. Однако мне удалось заставить его работать, просто изменив исходный URL-адрес в файле .git / config на адрес https: https://gitlab.com/mygitlabusername/mygitproject.git

Поскольку доступ через ssh запрещен, я понял, что использование https не должно быть проблемой. Однако он будет запрашивать ваше имя пользователя и пароль для каждого нажатия на репозиторий at.


0

Пожалуйста, используйте, git config credential.helper storeесли ваш сайт использует TLS / SSL. Надеюсь, это сработает


0

Кажется, есть различия между двумя способами доступа к репозиторию git, то есть с использованием SSH или HTTPS. Что касается меня, я столкнулся с ошибкой, потому что пытался запустить свой локальный репозиторий с помощью SSH.

Проблему можно просто решить, нажав кнопку клонирования на целевой странице вашего проекта, скопировав ссылку HTTPS и заменив ее на ссылку SSH в формате «git @ gitlab ...».


Это не отвечает на вопрос.
RalfFriedl

0

Изменить разрешение :: chmod 400 ~ / .ssh / id_rsa Мне помогло.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.