Obtendo permissão negada (chave pública) no gitlab


134

Meu problema é que não consigo enviar ou buscar no GitLab. No entanto, eu posso clonar (via HTTP ou SSH). Eu recebo esse erro quando tento enviar:

Permissão negada (chave pública) fatal: Não foi possível ler no repositório remoto

De todos os tópicos que eu procurei, aqui está o que eu fiz:

  • Configure uma chave SSH no meu computador e adicione a chave pública ao GitLab
  • Feito o config --global para nome de usuário e email
  • Clonado via SSH e HTTP para verificar se isso resolveria o problema
  • Concluído o comando ssh -T git@gitlab.com

Se você tiver alguma idéia de como resolver meu problema, isso será muito apreciado.


5
correr ssh -vvvv git@gitlab.compara ver se ele pega a chave SSH
Nils Werner

1
Você adicionou a chave SSH em gitlab.com/profile/keys ?
Akram Fares

@ Nils Werner: Eu recebo um monte de linhas quando eu faço este comando, mas um deles é "Autenticação sucedido (publickey)"
Alexandre Fernandes Bartolomeu

4
certifique-se que você não está em execução sudo git clone git@gitlab.com:project/somethiing.git, caso contrário ssh vai olhar em /root/.sshvez da chave que você enviou~/.ssh/id_rsa
rivanov

1
Resolvi o mesmo problema adicionando uma chave ao agente por meio de "ssh-add ~ / .ssh / the_key" e depois autorizando a chave por frase. Esta é a parte particular do que adicionei ao GitLab.
Celdor

Respostas:


258

Eu encontrei isso depois de pesquisar muito. Vai funcionar perfeitamente bem para mim.

  1. Vá para "Git Bash", assim como o cmd. Clique com o botão direito e "Executar como administrador".
  2. Tipo ssh-keygen
  3. Pressione Enter.
  4. Ele solicitará que você salve a chave no diretório específico.
  5. Pressione Enter. Ele solicitará que você digite a senha ou digite sem senha.
  6. A chave pública será criada para o diretório específico.
  7. Agora vá para o diretório e abra a .sshpasta.
  8. Você verá um arquivo id_rsa.pub. Abra-o no bloco de notas. Copie todo o texto dele.
  9. Vá para https://gitlab.com/profile/keys .
  10. Cole aqui no campo de texto "chave".
  11. Agora clique no "Título" abaixo. Ele será preenchido automaticamente.
  12. Depois clique em "Adicionar chave".

Agora tente e funcionará com certeza.


2
Caso você esteja perdido ao copiar o arquivo pub para a área de transferência. tente o seguinte:type %userprofile%\.ssh\id_rsa.pub | clip
jquijano 28/05

5
no Windows 10, se você precisar encontrar .ssh \ id_rsa.pub, digite este arquivo ~ / .ssh / id_rsa.pub no git bash, mostrando a "Chave", para que você possa copiá-lo e colá-lo no campo de texto Em gitlab.com/profile/keys
Chutipong Roobklom 10/10

11
Certifique-se de fazer isso: ssh-add filename(com caminho-se não no dir RSA) depois de seguir os passos acima
Blasanka

3
Funcionou como um encanto. Obrigado.
Brduca 6/08/19

3
Eu fiz isso, problema não for corrigido, ficando permissões negadas
Billal Begueradj

62

Etapa 1: adicionado um arquivo de configuração no ~/.ssh/configarquivo que se parece com

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

Etapa 2: basta clonar o repositório git SEM sudo.
Documentação: https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths


1
Isso é necessário se o arquivo-chave com o nome padrão já estiver sendo usado para propósitos diferentes. Se você estiver criando um arquivo de chave com nome não padrão, como id_rsa_gitlabno exemplo de Fedo, precisará fornecer um arquivo de configuração. Bom artigo do Gitlab sobre o assunto: gitlab.com/help/ssh/…
Dany

Isso funcionou para mim. Eu tinha as duas chaves do Github e do Gitlab, para você escolher esta solução.
M.Cush

Eu tenho que mudar Hostnamepara Hostfazer este trabalho
Sadee

27

Eu acho que a solução simples é adicionar uma chave privada ao agente de autenticação (se sua chave não estiver ~/.ssh/id_rsa),

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

Você basicamente deixa ssh-agentcuidar disso.

Além disso, você pode adicioná-lo permanentemente .


é o arquivo com a extensão .pub
Felipe

7
Não. Chave privada é o arquivo sem .pubextensão.
Hussain

15

No meu caso, não funcionou no WSL (Windows Subsystem for Linux).

Quando inicio a WSL, devo

  • iniciar ssh-agent_ eval $(ssh-agent -s)
  • adicione a chave ao ssh-agent: ssh-add ~/.ssh/id_rsa
  • se solicitado, digite a senha

Agora a conexão funciona.
Podemos testar isso comssh -T git@github.com

notas:


11

verifique se você não está executando sudo git clone git@gitlab.com:project/somethiing.git, caso contrário, o ssh procurará /root/.ssha chave que você enviou~/.ssh/id_rsa


9

Existe uma solução muito simples para isso: em vez de trabalhar com ssh - vá para https. para fazer isso: na pasta do projeto, você tem uma pasta .git - você tem um arquivo de configuração - abra-o em um editor de texto e altere a linha

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

para

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


Obrigado. Trabalhou para mim.
Ktv6

7

se você estiver no Linux ou macox, tente isso no terminal:

ssh-add -l

se não retornar nada, tente o seguinte:

ssh-add

ele deve criar identidade em ~ / .ssh / id_rsa

após nova tentativa:

ssh-add -l

ele deve retornar sua identidade; portanto, depois de tentar clonar novamente, ele deve funcionar

NB: não se esqueça de adicionar sua chave ssh no seu perfil gitlab

obrigado


5

No meu caso, não foi um problema do gitlab, mas de configuração do sshd. O servidor ssh não permitiu conexão, exceto por uma lista de usuários. O usuário git, aquele conectado remotamente ao gitlab, não estava nessa lista. Portanto, verifique isso antes de mais nada.

Você pode verificar a configuração do seu servidor ssh /etc/ssh/sshd_config. Se você tem uma linha com a opção AllowUsers, adicione git a ela:

AllowUsers user1 user2 user3 git

3

Eu tenho o gitlab executando com o docker, foi o que fiz para corrigir o meu problema.

Constatou que dentro do docker / var / log / gitlab / sshd / current havia várias ocorrências de uma mensagem:

Autenticação recusada: propriedade ou modos inadequados para o arquivo /var/opt/gitlab/.ssh/authorized_keys

Depois disso, mudei a propriedade desse arquivo de 99: users para git: users with:

chown git: usuários allowed_keys


1
Muito obrigado. Estou executando o Gitlab no Kubernetes e o diretório / gitlab-data (que também é o ponto de montagem para o autorizado_keys) teve problemas de permissão. Um simples chown foi suficiente.
Dillen Meijboom

3

Passos a serem feitos, tenho o mesmo erro, mas eu o corrigi. O Gitlab quer o ssh-rsa, então abaixo está o código para executar o ssh para o rsa

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

name@gmail.com é o e-mail da sua conta do gitlab

  1. Ele solicitará que você insira; basta pressionar Enter após o código abaixo ser solicitado,

    Digite o arquivo no qual salvar a chave (/home/yourDesktopName/.ssh/id_rsa):

  2. Ele solicitará novamente que você insira; basta pressionar Enter após o código abaixo ser solicitado,

    Digite a senha (vazia para nenhuma senha):

  3. Ele solicitará novamente o último que você digitar. Basta pressionar Enter depois que o código abaixo for solicitado,

    Digite a mesma senha novamente:

  4. Você mostrará seu ssh-rsa generate.

  5. Entre na sua conta Gitlab e vá para a barra de navegação direita, você terá a configuração e, na barra lateral esquerda, a tecla ssh. Entre nele.

  6. Olhe acima do prompt pedindo para você entrar, você obterá o caminho do ssh-rsa.

  7. Vá para sua pasta SSH e obtenha o id_rsa.pub

  8. Abra-o e obtenha a chave e Copie e cole no Gitlab e você está quase pronto.

  9. Conferido por: ssh -T git@gitlab.com

  10. Você vai ter: Welcome to GitLab, @joy4!

  11. Feito.


obrigado. isso funciona no windows 10. Tentei ed25519 como o gitlab instruiu, mas não está funcionando.
Dika

Esta resposta é muito boa - não sei por que não votou mais.
mgibson

3

No começo, era muito difícil para mim, mas quando tentei, ficou muito fácil adicionar a chave ssh no Mac e Linux. Existem algumas etapas e comandos para fazer isso da seguinte maneira:

  1. Abra um terminal do seu sistema e mova-se para dentro do diretório do projeto usando o comando:
cd 'project directory name'
  1. Execute o comando ssh-keygennesse terminal e insira-o até que a imagem randomart da chave apareça lá.

  2. Em seguida, insira mais um comando nesse terminal:

cat ~/.ssh/id_rsa.pub

Isso irá gerar sua chave ssh. A chave começará com ssh-rsae terminará com .local.

  1. Copie a chave e vá para a seção de perfil do Gitlab, ssh keyseção e cole-a lá. Clique no Addbotão que irá funcionar.

isso funcionou para mim! obrigado
Shamseer Ahammed

2

Eu tive o mesmo problema, resolvi adicionando uma nova chave ssh:

  1. ssh-keygen -t ed25519 -C "email@example.com"
  2. Copie sua chave pública SSH para a área de transferência ( xclip -sel clip < ~/.ssh/id_ed25519.pubno meu caso no Linux)
  3. No gitlab, acesse as settings=>sshchaves e passe a nova chave

2

Quando você tem várias contas git e deseja uma chave ssh diferente

Você precisa seguir o mesmo passo para gerar a chave ssh, mas certifique-se de

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

Digite o caminho que você deseja salvar (por exemplo: my-pc / Desktop / .ssh / ed25519)

Adicione a chave pública ao seu gitlab ( Como adicionar a chave ssh ao gitlab )

Você precisa da nova identidade ssh usando o comando abaixo

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

2

Duas coisas principalmente

  1. Você deve ter as chaves id_rsa.pub e id_rsa (privada) na sua pasta .ssh (que deve estar na sua pasta pessoal. Crie-a, se não houver, coloque suas chaves). Não funcionaria se você nomeasse seus arquivos-chave de maneira diferente

  2. Altere a permissão do id_rsa como chmod 400 ~ / .ssh / id_rsa


2

Outro problema que pode causar esse comportamento é quando você tem uma instalação com 2 possíveis locais% HOME%.

Estou usando um PC em que alguns dos meus documentos estão armazenados localmente e alguns em uma unidade de rede. Alguns aplicativos pensam que C:\Users\<MyUserName>\é meu %home%, outros acham que U:\é o lar.

Acontece que ssh-keygencolocar minha chave privada embaixo C:\users\<MyUserName>\, e isso ssh -Te ssh -vtambém olhar lá.

Então, tudo parece funcionar bem, exceto isso git clone, git pushe outros procuram uma chave U:\. Como falha, recebo o erro mencionado acima.

Levei uma hora para descobrir, mas no final a solução era simples: eu copiei tudo, desde C:\Users\<MyUserName>\.sshaU:\.ssh


1

Eu resolvi assim ..

Gerou uma chave para o Windows usando este comando:

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

mas o problema era que, depois de executar este comando, ele apareceu uma linha: "Digite o arquivo no qual salvar a chave (/c/Users/xxx/.ssh/id_rsa):" Aqui, eu estava fornecendo apenas o nome do arquivo por causa do qual minha chave estava sendo salva no meu PC e não no local especificado. Quando eu fiz o "git clone", ele estava assumindo que a chave estava no local "/c/Users/xxx/.ssh/id_rsa", mas não foi encontrada, portanto estava gerando erro.

No momento da geração da chave, 2 arquivos foram gerados, digamos "file1" e "file1.pub". Renomeei esses dois arquivos como

file1 -> id_rsa 

e

file1.pub -> id_rsa.pub

e colocou ambos no local "/c/Users/xxx/.ssh/"


1

Vá para o terminal e gere novamente a tecla ssh. Digite ssh-keygen. Ele perguntará onde você deseja salvá-lo, digite o caminho.

Em seguida, copie a chave pública para a plataforma gitlabs. Geralmente começa com ssh-rsa.


1

O problema para mim era que eu mudei UsePAMpara yespara nono arquivo de configuração SSH em /etc/ssh/sshd_config. Com UsePAM yestudo funciona perfeitamente.


1

Encontrei a solução na ajuda do 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

Espero que possa ajudar alguns de vocês!


1

Como adicionar a chave SSH à conta do gitlab no ubuntu?

  1. Abra o terminal no diretório do projeto.
  2. Digite 'ssh-keygen -o -t rsa -b 4096 -C "seu email do gitlab"' e pressione enter
  3. Digite 'vim /home/mnbtech/.ssh/id_rsa.pub' e pressione enter (ou abra manualmente seu 'id_rsa.pub' de onde você o salvou)
  4. A chave SSH aparecerá. Copie aqueles e

  5. Acesse sua conta do gitlab.

  6. Clique na imagem do perfil E clique na configuração
  7. No lado esquerdo, selecione SSH-Keys
  8. Em seguida, cole a chave. Clique em adicionar chave

SSH-Key será adicionado!

(NB, se você tiver a chave SSH de Gerar visualizações e a permissão Obtenção negada (chave pública). Você exclui a chave ssh de visualizações e gera uma nova e adiciona git user.name e email no seu terminal)


O que é diferente nessa resposta do que nas instruções anteriores?
RalfFriedl

1

Resolvi o git@gitlab.com: Permission denied (publickey)problema usando as seguintes instruções

  1. CORRE cat ~/.ssh/id_rsa.pub
  2. Copie id_rsa.pub(chave pública) para o seu getlab `Setting -> SSH Keys
  3. CORRE cat ~/.ssh/id_rsa
  4. Copie id_rsa(chave privada) para `Code_repo-> git_auth-> id_rsa

NOTA: Cuide do usuário da máquina se você estiver usando o rootusuário no DockerFile ou em qualquer outro lugar, sudo suantes de executar os comandos acima para obter chaves públicas e privadas do usuário root.


1

No nosso caso, não foi um problema no lado do usuário / cliente, mas no lado do servidor Gitlab.

Estamos executando uma instância local do Gitlab CE 12.9 no CentOS 7.1.

Descobrimos que no servidor, o arquivo .ssh / allowed_keys não estava sendo atualizado corretamente. Os usuários criam suas chaves SSH (seguindo o guia gitlab) e adicioná-lo ao servidor gitlab, mas o servidor não atualiza os authorized_keys , por isso vai sempre resultar em erros de permissão negada.

Uma solução alternativa foi reconstruir o arquivo allowed_keys executando:

$ sudo gitlab-rake gitlab:shell:setup

Isso funcionaria para qualquer pessoa que adicionasse suas chaves antes de executar a tarefa rake. Para os próximos usuários que adicionariam suas chaves, alguém precisará executar manualmente as tarefas de rake novamente.

Uma solução mais permanente foi o de não usar o authorized_keys arquivo e usar em vez de uma pesquisa indexada na base de dados gitlab :

O GitLab Shell fornece uma maneira de autorizar usuários SSH através de uma pesquisa rápida e indexada no banco de dados GitLab. O GitLab Shell usa a impressão digital da chave SSH para verificar se o usuário está autorizado a acessar o GitLab.

Adicione o seguinte ao seu sshd_configarquivo. Geralmente está localizado em /etc/ssh/sshd_config, mas será /assets/sshd_configse você estiver usando o 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 

Recarregue o OpenSSH:

# Debian or Ubuntu installations   
sudo service ssh reload

# CentOS installations   
sudo service sshd reload 

Confirme se o SSH está funcionando removendo a chave SSH do usuário na interface do usuário, adicionando uma nova e tentando obter um repositório.

Por padrão (bem como o padrão em nossa instalação), o arquivo Write to allowed_keys foi verificado nas configurações Admin Area> Performance Optimization . Então, desmarcamos isso e usamos o banco de dados Gitlab.

insira a descrição da imagem aqui

Depois de configurar a pesquisa indexada e desmarcar o arquivo Write to allowed_keys , o acesso SSH ficou OK.


1

Para quem usa o Windows 10 e nada mais funciona para ele / ela:

No meu caso, tive que clonar o repositório com https em vez de ssh e uma janela apareceu solicitando minhas credenciais. Depois disso, tudo funciona bem.


1

Eu sei, estou respondendo isso muito tarde e até o StackOverflow confirmou se realmente quero responder. Estou respondendo porque ninguém descreveu o problema real e queria compartilhar o mesmo.

O básico

Primeiro, entenda o que é o controle remoto aqui. Remoto é o GitLab e seu sistema é o local; portanto, quando falamos sobre o remoto origin, qualquer URL definida na git remote -vsaída é sua URL remota.

Os Protocolos

Basicamente, o Git clone / push / pull funciona em dois protocolos diferentes majoritariamente (também existem outros) -

  1. Protocolo HTTP
  2. Protocolo SSH

Quando você clona um repositório (ou altera a URL remota) e usa a URL HTTPs como https://gitlab.com/wizpanda/backend-app.git , usa o primeiro protocolo, ou seja, o protocolo HTTP.

Embora se você clonar o repositório (ou alterar o URL remoto) e usar o URL como git@gitlab.com:wizpanda/backend-app.gitele, ele usará o protocolo SSH.

Protocolo HTTP

Neste protocolo, todas as operações remotas, como clonagem, push & pull, usam a autenticação simples, como nome de usuário e senha do seu controle remoto (neste caso, GitLab), o que significa que, para cada operação, você deve digitar seu nome de usuário e senha, o que pode ser complicado. .

Então, quando você pressiona / puxa / clona, ​​o GitLab / GitHub o autentica com seu nome de usuário e senha e permite que você faça a operação.

Se você quiser tentar fazer isso, você pode alternar para HTTP URL, executando o comando git remote set-url origin <http-git-url>.

Para evitar esse caso, você pode usar o protocolo SSH.

Protocolo SSH

Uma conexão SSH simples funciona em pares de chaves público-privadas. Portanto, no seu caso, o GitLab não pode autenticá-lo porque você está usando o URL SSH para se comunicar. Agora, o GitLab deve conhecê-lo de alguma forma. Para isso, você deve criar um par de chaves público-privado e fornecer a chave pública ao GitLab.

Agora, quando você pressiona / puxa / clona com o GitLab, o GIT (SSH internamente), por padrão, oferece sua chave privada ao GitLab e confirma sua identidade, e o GitLab permite que você execute a operação.

Portanto, não repetirei os passos que já foram dados por Muhammad, repetirei-os teoricamente.

  1. Gere um par de chaves `ssh-keygen -t rsa -b 2048 -C" Minha chave SSH comum "
  2. O par de chaves gerado será, por padrão, ~/.sshnomeado id_rsa.pub(chave pública) e id_rsa(chave privada).
  3. Você armazenará a chave pública na sua conta do GitLab (a mesma chave pode ser usada em vários ou em qualquer servidor / conta).
  4. Quando você clona / empurra / puxa, o GIT oferece sua chave privada.
  5. O GitLab combina a chave privada com a sua chave pública e permite que você execute.

Dicas

Você sempre deve criar uma chave rsa forte com pelo menos 2048 bytes. Então o comando pode ser ssh-keygen -t rsa -b 2048.

https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair

Pensamento geral

Tanto a abordagem tem seus prós e contras. Depois de digitar o texto acima, fui pesquisar mais sobre isso, porque nunca li algo sobre isso.

Encontrei este documento oficial https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols que diz mais sobre isso. Meu argumento aqui é que, lendo o erro e refletindo sobre o erro, você pode fazer sua própria teoria ou entendimento e, em seguida, combinar com alguns resultados do Google para corrigir o problema :)



0

Eu uso o ubuntu 18.04, e foi realmente um problema de permissão na minha máquina local. O problema desapareceu quando defini a permissão de leitura / gravação na minha pasta .git.


0

Bem, eu tive esse mesmo problema e depois de tentar a resposta que @Khan propôs. No entanto, eu só consegui fazê-lo funcionar apenas alterando a URL de origem no arquivo .git / config para o endereço https: https://gitlab.com/mygitlabusername/mygitproject.git

Como o acesso via ssh é negado, eu descobri que usar https não deveria ser um problema. No entanto, solicitará seu nome de usuário e senha para cada envio ao repositório at


0

Por favor, use git config credential.helper storese o seu site estiver usando TLS / SSL. Espero que isso funcione


0

Parece haver diferenças entre as duas maneiras de acessar um repositório git, ou seja, usando SSH ou HTTPS. Para mim, encontrei o erro porque estava tentando enviar por push meu repositório local usando SSH.

O problema pode ser resolvido simplesmente clicando no botão clone na página de destino do seu projeto e copiando o link HTTPS e substituindo-o pelo link SSH que aparece com o formato "git @ gitlab ...".


Isso não responde à pergunta.
RalfFriedl

0

Alterar permissão :: chmod 400 ~ / .ssh / id_rsa Isso ajudou para mim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.