Quais “direitos de acesso” poderiam estar bloqueando o acesso a um repositório do gitlab?

14

Estou tentando configurar o gitlab (6.5.1) em um servidor limpo e fresco. Tudo parece funcionar, mas o git é incapaz de enviar para qualquer projeto. Seguir os comandos da página do projeto recém-criada e enviar para o controle remoto via ssh fornece:

$ git push -u origin master
fatal: Could not read from remote repository.

Please make sure you have the correct access
rights and the repository exists.

Este parece ser um problema bastante comum. Infelizmente, parece ter várias causas em potencial e nenhuma delas parece corresponder. Da edição 3424 em uma versão antiga e várias outras fontes online, eu vi e verifiquei as seguintes sugestões:

  • Teclas ssh restantes

    Esta é uma configuração limpa, sem sobras. Minha chave foi adicionada corretamente ao arquivo de chaves autorizadas e é a única listada.

  • A execução do ssh com o log de depuração mostra erros relacionados aos vars do ambiente Ruby.

    O meu aparece limpo. A depuração SSH mostra uma conexão bem-sucedida. Tudo sobre o handshaking de autenticação é normal, então este é o fim da saída:

    debug1: Sending command: git-receive-pack 'username/reponame.git'
    debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
    debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
    debug1: channel 0: free: client-session, nchannels 1
    debug1: fd 0 clearing O_NONBLOCK
    debug1: fd 1 clearing O_NONBLOCK
    
  • Problemas com o ambiente gitlab-shell.

    Ao contrário de muitos outros com a mesma mensagem de erro acima, meu script de verificação do gitlab-shell retorna um atestado de integridade:

    % sudo -u gitlab -H ~gitlab/gitlab-shell/bin/check   
    Check GitLab API access: OK
    Check directories and files: 
            /var/lib/gitlab/repositories: OK
            /var/lib/gitlab/.ssh/authorized_keys: OK
    Test redis-cli executable: redis-cli 2.8.5
    Send ping to redis server: PONG
    
  • Reinicie {unicorn, sidekiq, redis}

    Os relatórios de que reiniciar um ou mais serviços esclarecem isso não parecem se aplicar aqui. Este não é um problema intermitente que corrige o daemon.

  • O repo não está sendo criado fisicamente

    Mas isso é. Na primeira vez, o repositório bare git ~gitlab/repositories/username/reponame.gité criado toda vez e parece ter as permissões corretas.

  • O Gitlab-shell não pode falar com o servidor da API porque A) problemas de DNS, B) ligação incorreta de ip / porta / interface C) não tendo / tendo uma barra final.

    O script de verificação diz que o acesso à API está bom.

    Como não estou executando o nginx, o problema de ligação de IP padrão relacionado a isso é n / a.

    Eu tentei tanto *:8080e 127.0.0.1:8080quanto ao valor de escuta unicorn.yml.

    Além disso, tentei várias iterações do host local, 127.0.0.1 e o nome de domínio totalmente qualificado (que está resolvendo bem o DNS) com e sem barras shell.ymlinutilizáveis. Também tentei conectar isso diretamente ao servidor unicórnio na porta 8080, em vez do host SSL / proxy Apache na porta 80. Nada parece fazer alguma diferença. Meu certificado não é autoassinado e está funcionando bem para navegadores, mas tentei configurar de self_signed_cert: truequalquer maneira. Nada.

  • Os caminhos do git relatados estão incorretos; adicione o caminho completo da página inicial do usuário do gitlab.

    Isso parece uma sugestão legítima, se o gitlab-shell não estiver fazendo algum negócio de macacos para corrigir isso, mas tentei mudar git remote add origin gitlab@server:username/reponame.gitpara `` git remote add origin gitlab @ server: repositories / username / reponame.git` sem sucesso. Mesmo erro.

Essa parece ser a litania de soluções sugeridas, mas nenhuma delas parece certa. Nota: eu sou capaz de enviar http. O prompt de login aceita meu nome de usuário e senha ldap e aceita um envio. Este é apenas um problema ao tentar usar o SSH. Testar apenas a parte de login do ssh ssh -T gitlab@serverfunciona bem.

O que mais poderia estar causando esse erro?

Como é possível depurar esse problema no gitlab? Não parece haver nada de relevante ~gitlab/gitlab-shell/gitlab-shell.log. Onde seria encontrada uma mensagem de erro mais informativa?

Caleb
fonte
Qual é o resultado de: "ssh -vv gitlab @ server" ??
21814 DrGkill
@DrGkill Nada de interessante (para os meus olhos), veja por si mesmo .
21714 Caleb
Veja em seu sshd_config se o gitlab é permitido para login externo. Eu diria 2 possíveis culpados: SSH ou gitlab-shell. O que o auth.log diz quando o gitlab está se conectando?
DrGkill
@DrGkill Eu verifiquei isso (e se não fosse permitido o login externo pelo sshd ou pam os logs que eu mostrei acima não teriam mostrado um aviso de autenticação bem-sucedida). O SSH está se conectando perfeitamente. Os logs do servidor mostram uma autenticação bem-sucedida, que uma sessão foi aberta, algumas coisas do sistema sobre como configurar o ambiente do usuário e, em seguida, "foram desconectadas do <ip remoto>" e mais algumas coisas sobre a limpeza da sessão.
Caleb

Respostas:

7

Tenho certeza de que você tem um problema de configuração entre o SSH e o sistema devido a esta mensagem de depuração do SSH:

client_input_channel_req: channel 0 rtype [email protected] reply 0

Você recebe essa mensagem imediatamente após uma autenticação bem-sucedida e nenhuma mensagem do bash, o que significa que nenhum programa foi iniciado após o login.

Assista no seu arquivo passwd se você tiver as configurações corretas para o usuário do gitlab:

gitlab:x:1011:1012:GitLab,,,:/path/to/gitlab:/bin/bash

Verifique se o bash não tem nada de estranho nos arquivos de configurações, como

  • bash.bashrc
  • .perfil
  • .bashrc

Em seguida, suba para o nível superior: Gitlab-shell Verifique se o /path/to/gitlab/.ssh/authorized_keys possui a configuração abaixo:

command="/path/to/gitlab/gitlab-shell/bin/gitlab-shell key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa A...

com / path / to / gitlab / gitlab-shell / bin / gitlab-shell de propriedade do usuário e executável do gitlab.

Você pode ter certeza de que o gitlab-shell está totalmente operacional iniciando o comando:

# /path/to/gitlab-shell/bin/gitlab-shell
Welcome to GitLab, Anonymous!

Se o login remoto estiver realmente funcionando e conectado corretamente ao gitlab-shell, você deverá receber a mesma mensagem de boas-vindas (mas compatível com o usuário cuja chave ssh você costumava fazer login) antes que você o despeje se tentar efetuar o login remotamente.

$ ssh gitlab@server
Welcome to GitLab, <your user's full name>!
Connection to <server> closed.

Nenhuma mensagem aqui provavelmente indica que o ssh não está conectando você ao gitlab.

Por fim, verifique sua configuração do gitlab-shell (config.yml) e verifique se:

http_settings:
    # trailing slash is important
    gitlab_url: "https://remote_server/"
    ca_file: /path/to/webserver/certificate.crt

e eventualmente :

    self_signed_cert: false
DrGkill
fonte
Doh. <head-desk> Você estava no caminho certo o tempo todo. O usuário do gitlab estava sendo atribuído /bin/false. O pacote Arch não define o shell corretamente ao adicionar esse usuário ou eu o quebrei em algum lugar no processo de implementação da autenticação ldap neste sistema. Obrigado por todo o esforço.
Caleb
a resposta, me ajudou a depurar. Outro problema é que, quando o encaminhamento de chave ssh está ativado, você envia a chave errada para o gitlab, que não pode identificá-lo. Quando você entra no gitlab, também recebe o Welcome Anonymous. Apenas desativar o encaminhamento de tecla em seu jumpserver com -a ssh
tommics
Eu tinha o mesmo problema que Caleb e também descobri que para fazê-lo funcionar, era necessário definir um shell em vez de / bin / {false, true, nologin}. Mas, na verdade, o usuário é criado sem shell de propósito durante a instalação (consulte: gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/… ) sudo adduser --disabled-login --gecos 'GitLab' git. Por isso, deve funcionar sem casca. Ainda estou procurando outra solução.
Huygens
0

Eu tive esse mesmo problema e, depois de dias pesquisando e pesquisando no Stack Overflow, finalmente encontrei o meu problema. Eu queria que isso estivesse conectado por escrito ao Gitlab, caso alguém tivesse o mesmo problema.

Encontrei minha solução aqui: /programming/17307154/git-bash-push-to-bitbucket-ignores-ssh-key

Estou no Windows e o problema era que o Git Bash estava tentando obter sua localização da chave SSH no plink.exe, instalado com o Putty.

A solução foi excluir a variável de ambiente GIT_SSH. Então tudo funcionou.

Espero que isto seja útil a alguém.

AllanT
fonte