Lo so, sto rispondendo molto tardi e anche StackOverflow ha confermato se voglio davvero rispondere. Sto rispondendo perché nessuno ha effettivamente descritto il problema reale, quindi volevo condividere lo stesso.
Le basi
In primo luogo, capire che cos'è il telecomando qui. Il telecomando è GitLab e il tuo sistema è il locale, quindi quando parliamo del telecomando origin
, qualsiasi URL impostato git remote -v
nell'output è il tuo URL remoto.
I protocolli
Fondamentalmente, clone / push / pull di Git funziona principalmente su due protocolli diversi (ce ne sono anche altri) -
- Protocollo HTTP
- Protocollo SSH
Quando cloni un repository (o modifichi l'URL remoto) e utilizzi l'URL HTTP come https://gitlab.com/wizpanda/backend-app.git , utilizza il primo protocollo, ovvero il protocollo HTTP.
Mentre se clonate il repository (o modificate l'URL remoto) e utilizzate l'URL come git@gitlab.com:wizpanda/backend-app.git
allora, utilizza il protocollo SSH.
Protocollo HTTP
In questo protocollo, ogni operazione remota, ad esempio clonazione, push & pull, utilizza la semplice autenticazione, cioè nome utente e password del telecomando (GitLab in questo caso), il che significa che per ogni operazione, è necessario digitare il nome utente e la password che potrebbero essere ingombranti .
Quindi quando si preme / pull / clone, GitLab / GitHub ti autentica con il tuo nome utente e password e ti consente di eseguire l'operazione.
Se vuoi provare questo, puoi passare all'URL HTTP eseguendo il comando git remote set-url origin <http-git-url>
.
Per evitare questo caso, è possibile utilizzare il protocollo SSH.
Protocollo SSH
Una semplice connessione SSH funziona su coppie di chiavi pubblico-private. Quindi, nel tuo caso, GitLab non può autenticarti perché stai utilizzando l'URL SSH per comunicare. Ora, GitLab deve conoscerti in qualche modo. Per questo, devi creare una coppia di chiavi pubblica-privata e fornire la chiave pubblica a GitLab.
Ora quando si preme / pull / clone con GitLab, GIT (SSH internamente) offrirà di default la propria chiave privata a GitLab e conferma la propria identità e quindi GitLab consentirà di eseguire l'operazione.
Quindi non ripeterò i passi che sono già stati dati da Muhammad, li ripeterò teoricamente.
- Genera una coppia di chiavi `ssh-keygen -t rsa -b 2048 -C" La mia chiave SSH comune "
- La coppia di chiavi generata sarà predefinita in
~/.ssh
nome id_rsa.pub
(chiave pubblica) eid_rsa
(chiave privata).
- Memorizzerai la chiave pubblica sul tuo account GitLab (la stessa chiave può essere utilizzata in più o in qualsiasi server / account).
- Quando cloni / premi / tira, GIT offre la tua chiave privata.
- GitLab abbina la chiave privata con la tua chiave pubblica e ti consente di eseguire.
Suggerimenti
È sempre necessario creare una chiave rsa avanzata con almeno 2048 byte. Quindi il comando può essere ssh-keygen -t rsa -b 2048
.
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
Pensiero generale
Entrambi gli approcci hanno i loro pro e contro. Dopo aver digitato il testo sopra, sono andato a cercare di più su questo perché non ho mai letto qualcosa al riguardo.
Ho trovato questo documento ufficiale https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols che racconta di più al riguardo. Il mio punto qui è che, leggendo l'errore e riflettendo sull'errore, puoi creare la tua teoria o comprensione e quindi abbinare alcuni risultati di Google per risolvere il problema :)
ssh -vvvv git@gitlab.com
per vedere se raccoglie la chiave SSH