Lo sé, estoy respondiendo esto muy tarde e incluso StackOverflow confirmó si realmente quiero responder. Estoy respondiendo porque en realidad nadie describió el problema real, por lo que quería compartirlo.
Los basicos
Primero, comprenda que cuál es el control remoto aquí. El control remoto es GitLab y su sistema es el local, por lo tanto, cuando hablamos del control remoto origin
, cualquier URL establecida en su git remote -v
salida es su URL remota.
Los protocolos
Básicamente, Git clone / push / pull funciona principalmente en dos protocolos diferentes (también hay otros):
- Protocolo HTTP
- Protocolo SSH
Cuando clona un repositorio (o cambia la URL remota) y usa la URL HTTP como https://gitlab.com/wizpanda/backend-app.git, entonces usa el primer protocolo, es decir, el protocolo HTTP.
Mientras que si clonas el repositorio (o cambias la URL remota) y usas la URL como git@gitlab.com:wizpanda/backend-app.git
entonces, usa el protocolo SSH.
Protocolo HTTP
En este protocolo, cada operación remota, es decir, clonar, empujar y tirar, utiliza la autenticación simple, es decir, el nombre de usuario y la contraseña de su control remoto (GitLab en este caso), lo que significa que para cada operación, debe escribir su nombre de usuario y contraseña, lo que puede ser engorroso. .
Entonces, cuando empuja / jala / clona, GitLab / GitHub lo autentica con su nombre de usuario y contraseña y le permite realizar la operación.
Si desea probar esto, puede cambiar a la URL HTTP ejecutando el comando git remote set-url origin <http-git-url>
.
Para evitar ese caso, puede usar el protocolo SSH.
Protocolo SSH
Una conexión SSH simple funciona en pares de claves público-privadas. Entonces, en su caso, GitLab no puede autenticarlo porque está utilizando una URL SSH para comunicarse. Ahora, GitLab debe conocerte de alguna manera. Para eso, debe crear un par de claves pública-privada y darle la clave pública a GitLab.
Ahora, cuando empuja / jala / clona con GitLab, GIT (SSH internamente) ofrecerá por defecto su clave privada a GitLab y confirmará su identidad y luego GitLab le permitirá realizar la operación.
Así que no repetiré los pasos que ya dio Muhammad, los repetiré teóricamente.
- Genere un par de claves `ssh-keygen -t rsa -b 2048 -C" Mi clave SSH común "
- El par de claves generado estará por defecto en
~/.ssh
nombre id_rsa.pub
(clave pública) &id_rsa
(clave privada).
- Almacenará la clave pública en su cuenta de GitLab (la misma clave se puede usar en múltiples servidores o cuentas).
- Cuando clonas / empujas / jalas, GIT ofrece tu clave privada.
- GitLab combina la clave privada con su clave pública y le permite realizar.
Consejos
Siempre debe crear una clave rsa segura con al menos 2048 bytes. Entonces el comando puede ser ssh-keygen -t rsa -b 2048
.
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
Pensamiento general
Tanto el enfoque tiene sus pros y sus contras. Después de escribir el texto anterior, fui a buscar más sobre esto porque nunca leí algo sobre esto.
Encontré este documento oficial https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols que dice más sobre esto. Mi punto aquí es que, al leer el error y reflexionar sobre el error, puede hacer su propia teoría o comprensión y luego puede coincidir con algunos resultados de Google para solucionar el problema :)
ssh -vvvv git@gitlab.com
para ver si recoge la clave SSH