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 -v
saída é sua URL remota.
Os Protocolos
Basicamente, o Git clone / push / pull funciona em dois protocolos diferentes majoritariamente (também existem outros) -
- Protocolo HTTP
- 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.git
ele, 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.
- Gere um par de chaves `ssh-keygen -t rsa -b 2048 -C" Minha chave SSH comum "
- O par de chaves gerado será, por padrão,
~/.ssh
nomeado id_rsa.pub
(chave pública) e id_rsa
(chave privada).
- 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).
- Quando você clona / empurra / puxa, o GIT oferece sua chave privada.
- 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 :)
ssh -vvvv git@gitlab.com
para ver se ele pega a chave SSH