Gitlab não funciona com chaves SSH

10

Estou tendo problemas com o Gitlab. Usei o seguinte guia para instalar e configurar o Gitlab https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md . A instalação parecia correr bem e tudo. O aplicativo da web parece estar funcionando bem. No entanto, não consigo clonar, puxar, empurrar, basicamente não posso usar o Gitlab. Eu vi 403 erros com HTTP e permissão negados ao tentar clonar no SSH.

Garanto que minhas chaves privadas estão configuradas corretamente no Windows e no OS X. Posso ver as chaves públicas no servidor. Adicionei o seguinte ao meu arquivo de configuração em ~ / .ssh.config

Host {hostname}
    User git
    Hostname {hostname}
    PreferredAuthentications publickey
    IdentityFile C:/Users/{username}/.ssh/id_rsa

É o que vejo em / var / log / secure

Jan 14 17:31:48 dev_version_control sshd[3696]: Connection closed by 192.168.17.113
Jan 14 17:32:18 dev_version_control sshd[3700]: Connection closed by 192.168.17.113

O /var/log/messagenão funcionou quando tentei usar git ou ssh

Não sei para onde ir a partir daqui. Alguma sugestão?

Não sei o que você quer dizer com SSH usando o nome de usuário git. O guia que usei não criou uma senha para o usuário git e afirmou que o usuário não pode ser usado para efetuar login.

greyfox
fonte
Você consegue fazer o SSH no servidor Git como usuário 'git'? Você pode tentar adicionar o parâmetro '-vvv' para obter mais informações sobre por que a conexão está sendo fechada? Também pode valer a pena verificar os arquivos / var / log / secure e / var / log / messages para ver se há algum erro nele.
jaseeey
As chaves públicas não estão configuradas no cliente - você precisa garantir que suas chaves privadas estejam no seu cliente. Chaves públicas vão no servidor.
EEAA
Atualizei minha pergunta. Esperemos que isso ajuda
Greyfox

Respostas:

10

Desde que você tenha carregado sua chave privada no seu cliente, parece que isso pode ser um problema de permissão no diretório inicial do usuário 'git' e no diretório .ssh.

Por favor, tente alterar o diretório / home / git para uma máscara 0711:

chmod 0711 /home/git

Verifique se o diretório /home/git/.ssh possui uma máscara 0700:

chmod 0700 /home/git/.ssh

Verifique se o arquivo /home/git/.ssh/authorized_keys possui uma máscara de 0600:

chmod 0600 /home/git/.ssh/authorized_keys

Substitua / home / git por qualquer diretório inicial para o usuário 'git', se for diferente no tutorial. Se não houver permissões, deixe um comentário e veremos o que mais pode estar acontecendo.

jaseeey
fonte
Esse pode ter sido o problema. Eu sei clonar usando o git clone git @ {hostname}: {workspace} / {repository} no meu Mac. Infelizmente, eu deixei minha máquina Windows no trabalho e terei que tentar amanhã. A autenticação de chave pública / privada não funciona sobre HTTP com o Gitlab? Fiquei com a impressão de que era assim que o Github funcionava, mas posso estar errado sobre isso.
Greyfox
A autenticação de chave pública / privada funciona apenas sobre SSH. Se você usa HTTP, precisará usar seu nome de usuário e senha para fazer qualquer coisa. Se você estiver usando uma nova versão do Git, como a v1.8, deverá solicitar um nome de usuário e senha. Versões mais antigas do Git não fizer isso, então você tem que adicionar seu nome de usuário e senha em linha do controle remoto (ou seja https://username:[email protected]/repo.git)
jaseeey
Ahhhh isso faz muito mais sentido agora. O aplicativo GitHub for Windows armazena as credenciais? Muito obrigado pela ajuda!
Greyfox
Não usei muito o aplicativo GitHub para Windows, mas acho que, pela memória, ele exigia um login quando você o abriu, por isso diria que armazena as credenciais de acesso para poupar a dor de inseri-las o tempo todo.
jaseeey
1

Verifique se você possui apenas um registro para sua chave pública (que foi importada pela web) /home/git/.ssh/authorized_keyse se essa chave possui o prefixo e o título do gitlab. Em outras palavras, se você adicionou a mesma chave manualmente antes de instalar o gitlab, remova-a.

sinm
fonte
Você pode ter várias chaves em lá e você será capaz de logon desde que a sua chave privada pode igualar-se ...
jaseeey
@ Jason, eu apenas editado para explicar mais precisamente
sinm
Obrigado, foi isso para mim. Eu coloquei minha chave ssh manualmente antes de usar o Gitlab para adicionar uma chave e as chaves duplicadas causaram problemas.
6 Dan Dan
1

Eu também recomendo verificar se o usuário tem permissão adequada para clonar / puxar / empurrar o gitlab. Acabei de gastar muito tempo examinando as configurações ssh / https, quando o motivo do problema foi o usuário no gitlab não ter permissões suficientes ...

shtolik
fonte
1

Na minha situação, instalei o gitlab via pacotes do FreeBSD. O Gitlab SSH não funcionou. A causa disso foi um diretório inicial errado para o git: (vipw)

git:*:211:211::0:0:gitosis user:/usr/local/git:/bin/sh

Eu mudei isso para:

git:*:211:211::0:0:gitosis user:/home/git:/bin/sh
gamecreature
fonte
1

Isso pode acontecer se o host tiver um '-' em seu nome. (Embora isso seja legal de acordo com a RFC 952 ).

O ssh solicita uma senha para qualquer host que possua um '-' em seu nome. Isso parece ser puramente um problema com a análise do arquivo de configuração ssh porque adicionar um alias ao ~ / .ssh / config (e usar esse alias nos meus URLs remotos do git) resolveu o problema.

Em outras palavras, tente colocar algo como o seguinte em seu C: / Users / {username} /. Ssh / config

Host {a}
    User git
    Hostname {a-b.domain}
    IdentityFile C:/Users/{username}/.ssh/id_rsa

e onde você tem um controle remoto do formulário

origin  [email protected]:repo-name.git

remova-o e adicione-o novamente usando o formulário

origin  git@a:repo-name.git
SensorSmith
fonte
1

Se você estiver usando variáveis ​​de ambiente para passar a chave, codifique-as com base64, caso contrário, elas provavelmente falharão com um erro solicitando sua senha. Isso significa que a chave está corrompida. Se você ver:

$ ssh-add <(echo "$SSH_PRIVATE_KEY")
Enter passphrase for /dev/fd/63: ERROR: Job failed: exit code 1

Em seguida, base64 codifica a variável SSH_PRIVATE_KEY. Se você estiver no OS X,

cat ~/.ssh/ssh_key_for_project | base64 | pbcopy

irá codificá-lo e copiá-lo para a área de transferência. Agora altere a linha de script .gitlab-ci.yml para

- ssh-add <(echo "$SSH_PRIVATE_KEY" | base64 -d)
Jonathan Wilkins
fonte
0

A execução eval $(ssh-agent)corrigiu meu problema.

michalzuber
fonte
0

Meu problema foi que o arquivo de chaves privadas id_rsa criado e salvo pelo puttygen tem um formato diferente do criado em uma máquina ubuntu. Depois de criar um par de chaves da máquina ubuntu, copie esses arquivos de volta para a máquina Windows na pasta% UserProfile% .ssh e adicione a nova chave pública gerada ao Gitlab. Não há mais permissão negada para mim

Quang Le
fonte