Come risolvere l'errore di autorizzazione negata (chiave pubblica) quando si utilizza Git?


632

Sono su Mac Snow Leopard e ho appena installato git.

Ci ho appena provato

git clone git@thechaw.com:cakebook.git

ma questo mi dà questo errore:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Cosa mi sto perdendo?
Ho anche provato a farlo ssh-keygensenza passphase ma sempre con lo stesso errore.


8
hai provato a caricare la chiave pubblica che hai generato tramite ssh-keygen?
Patrick Cornelissen,

Il mio problema era che ho provato a clonare sudo: questo è un altro utente con un'altra chiave pubblica.
Vitaly Zdanevich,

stesso errore. In precedenza ho creato una chiave pubblica tramite github, quindi ho generato un'altra coppia di chiavi con l' ssh-keygenutilità. L'eliminazione della vecchia chiave pubblica nelle impostazioni personali su github e l'aggiunta della mia chiave id_rsa.pub generata da ssh alle chiavi SSH e GPG hanno risolto i problemi di autorizzazione alla clonazione.
Tanner Dolby

Risposte:


774

Se l'utente non ha generato una coppia di chiavi pubblica / privata ssh precedentemente impostata

Queste informazioni funzionano su theChaw ma possono essere applicate a tutti gli altri repository git che supportano l'autenticazione SSH pubkey. (Vedi ad esempio gitolite , gitlab o github.)

Innanzitutto, imposta il tuo set di coppie di chiavi pubbliche / private. Questo può utilizzare DSA o RSA, quindi praticamente qualsiasi chiave configurata funzionerà. Sulla maggior parte dei sistemi è possibile utilizzare ssh-keygen.

  • Per prima cosa vorrai cd nella tua directory .ssh. Apri il terminale ed esegui:

    cd ~/.ssh && ssh-keygen

  • Successivamente è necessario copiarlo negli Appunti.
    • In esecuzione su OS X: cat id_rsa.pub | pbcopy
    • In esecuzione Linux: cat id_rsa.pub | xclip
    • Su Windows (tramite Cygwin / Git Bash) eseguire: cat id_rsa.pub | clip
  • Aggiungi la tua chiave al tuo account tramite il sito Web.
  • Finalmente installa il tuo .gitconfig.
    • git config --global user.name "bob"
    • git config --global user.email bob@... (non dimenticare di riavviare la riga di comando per assicurarsi che la configurazione sia ricaricata)

Ecco, dovresti essere bravo a clonare e fare il checkout.

Ulteriori informazioni sono disponibili all'indirizzo https://help.github.com/articles/generating-ssh-keys (grazie a @Lee Whitney) -

Se l'utente ha generato una coppia di chiavi pubblica / privata ssh precedentemente impostata

  • controlla quale chiave è stata autorizzata nelle impostazioni del tuo account github o gitlab
  • determinare quale chiave privata corrispondente deve essere associata al computer locale

eval $(ssh-agent -s)

  • definire dove si trovano le chiavi

ssh-add ~/.ssh/id_rsa


6
Ok. Questo in realtà non è un git ma un problema di sincronizzazione ssh. Ho ottenuto lo stesso con Assembla e il tuo link mi ha aiutato a risolverlo. Grazie !
Alexandre Bourlier,

Questa risposta è utile ma sembra più completa e altrettanto semplice se si stanno generando chiavi da zero: help.github.com/articles/generating-ssh-keys
whitneyland

6
Ho riscontrato un problema con il keygen. È sensibile all'indirizzo e-mail in una variabile env globale. Nel caso in cui tu abbia questo problema, ti consigliamo di specificare l'indirizzo e-mail per il tuo account github nel primo passaggio: ssh-keygen -t rsa -C "your_email@youremail.com"
melchoir55

30
Se ancora non funziona, dovrai farlo ssh-add ~/.ssh/id_rsa.
Michael Litvin,

1
La copia usando xclipsu Linux ha funzionato solo facendo quanto segue xclip -sel clip < ~/.ssh/id_rsa.pubelencato qui: help.github.com/articles/generating-ssh-keys
Pat Migliaccio

217

Risoluzione dei problemi più ampia e persino riparazioni automatizzate possono essere eseguite con:

ssh -vT git@github.com

Fonte: https://help.github.com/articles/error-permission-denied-publickey/


1
Il mio problema aveva a che fare con una chiave diversa per il mio server. Dopo aver usato il comando sopra per determinare il problema, ho risolto IdentifyFile nel mio file di configurazione e ha funzionato.
Jarie Bolander,

1
Ha mostrato quale chiave github stava cercando di usare per autenticarsi. v utile
cdosborn il

9
Questo non risolve nulla. Ricevo ancora l'errore nella domanda di OP.
IgorGanapolsky,

5
Il comando è lì per aiutarti a risolvere il problema, non è un interruttore magico fix-this-for-me.
stevek,

2
Non posso dire che ciò abbia risolto nulla, ma è un inferno di un comando interessante e funziona anche con GitHub Enterprise.
Hack-R

164

Questo errore può verificarsi quando si accede all'URL SSH (lettura / scrittura) anziché all'URL di sola lettura Git ma non si ha accesso in scrittura a quel repository.

A volte si desidera solo clonare il proprio repository, ad esempio distribuire su un server. In questo caso, in realtà hai solo bisogno dell'accesso SOLO LETTURA. Ma poiché si tratta del tuo repository personale, GitHub potrebbe visualizzare l'URL SSH se è la tua preferenza. In questa situazione, se la chiave pubblica dell'host remoto non si trova nelle chiavi SSH GitHub, l'accesso verrà negato, il che dovrebbe avvenire .

Un caso equivalente è quando si tenta di clonare il repository di qualcun altro a cui non si ha accesso in scrittura con l'URL SSH.

In una parola, se si intende clonare solo un repository, utilizzare l'URL HTTPS ( https://github.com/{user_name}/{project_name}.git) anziché l'URL SSH ( git@github.com:{user_name}/{project_name}.git), che evita la convalida (non necessaria) della chiave pubblica.


Aggiornamento: GitHub ora mostra HTTPS come protocollo predefinito e questa mossa può probabilmente ridurre il possibile uso improprio degli URL SSH.


Con l' https://github.comURL git, dice ancora SSL certificate problem: self signed certificate in certificate chain. git -c http.sslVerify=false clone ...sembra una mossa pericolosa. Chrome non fornisce tuttavia alcun avviso SSL. Pensieri?
Jason Kleban,

1
@ uosɐſ Mi dispiace ma non ho mai riscontrato questo problema. Forse la prima cosa da fare è provare lo stesso comando da una macchina diversa e vedere se il problema persiste.
kavinyao,

1
Lo ha fatto anche per me. Grazie. Per clonare il mio repository git sul mio account di hosting condiviso (1 e 1) ho dovuto usare git clone https://github.com/MyUserName/MyRepo.git Basta fare clic sui collegamenti di testo sotto l'URL del repository a destra della pagina Github dove dice " È possibile clonare con HTTPS, SSH o Subversion . ". (Fare clic su HTTPS per ottenere il collegamento anziché SSH predefinito .)
Oliver Schafeld

GRAZIE!!!!!!
Sharl Sherif

Risposta eccellente. Finalmente qualcuno spiega perché funziona così.
Qback

104

Il link di aiuto di github mi ha aiutato a risolvere questo problema. Sembra che la chiave ssh non sia stata aggiunta all'agente ssh. Questo è quello che ho finito per fare.

Comando 1:

Assicurarsi che ssh-agent sia abilitato. Il comando avvia lo ssh-agent in background:

eval "$(ssh-agent -s)"

Comando 2:

Aggiungi la tua chiave SSH all'agente ssh:

ssh-add ~/.ssh/id_rsa

7
Dopo l'aggiornamento a OSx El Capitan a Sierra, questo ha funzionato per me.
Louwki,

7
Lavora con me dopo l'aggiornamento a macOS Sierra =)
Adriano Resende,

Questo ha funzionato per me su Raspberry Pi, dove ssh-add ha un flag "-k" anziché "-K", a quanto pare. Ma una volta aggiunta la chiave di distribuzione, sono stato in grado di clonare con successo il mio repository utilizzando il suo collegamento SSH.
Josh,

34

Ho ricevuto lo stesso rapporto di errore.

Risolto con l'utilizzo di HTTP invece. Dal momento che non voglio impostare "chiavi SSH" per un PC di prova.

Cambia URL in HTTP quando clona:

git clone https://github.com/USERNAME/REPOSITORY.git

Il mio problema è un po 'diverso : ho impostato l'URL quando aggiungo un repository locale esistente al telecomando, usando:

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git

Per risolverlo, reimpostare l'URL su HTTP:

git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

A proposito, puoi controllare il tuo URL usando il comando:

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

Spero che questo possa aiutare qualcuno come me. : D



21

Nota che (almeno per alcuni progetti) devi avere un account github con una chiave ssh .

Guarda le chiavi elencate nel tuo agente di autenticazione ( ssh-add -l )
(se non ne vedi nessuna, aggiungi una delle tue chiavi esistenti con ssh-add / path / a / your / key (es: ssh-add ~ /.ssh/id_rsa ))
(se non si dispone di chiavi, crearne una prima. Vedere: http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html o semplicemente google ssh-keygen)

Per verificare di avere una chiave associata al tuo account github :

Vai a: https://github.com/settings/ssh

Dovresti vedere almeno una chiave con una chiave hash corrispondente a una delle hash che hai visto quando hai digitato ssh-add -l solo un minuto fa.

In caso contrario, aggiungine uno, quindi riprova.


Questo ha funzionato per me. Mi è successo perché la mia chiave non è stata aggiunta all'agente di autenticazione. Grazie.
anton

19

Ero alle prese con lo stesso problema che è quello che ho fatto e sono stato in grado di clonare il repository. Ho seguito queste procedure per iMac .

Primo passaggio: verifica se disponiamo già della chiave SSH pubblica.

  1. Terminale aperto.
  2. Entra ls -al ~/.sshper vedere se sono presenti chiavi SSH esistenti:

Controlla l'elenco delle directory per vedere se hai già una chiave SSH pubblica. Il pubblico predefinito è uno dei seguenti d_dsa.pub, id_ecdsa.pub, id_ed25519.pub, id_rsa.pub

Se non lo trovi, vai al passaggio 2, altrimenti segui il passaggio 3

Passaggio 2: generazione della chiave SSH pubblica

  1. Terminale aperto.
  2. Inserisci il comando followong con il tuo indirizzo email valido che usi per github ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. Vedrai quanto segue nel terminale Generating public/private rsa key pair. Quando viene richiesto di "Enter a file in which to save the key,"premere Invio. Questo accetta il percorso del file predefinito. Quando viene richiesto di Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]premere nuovamente Invio. Al prompt, digitare una passphrase sicura.
  4. Enter passphrase (empty for no passphrase): [Type a passphrase]premere Invio se non si desidera Enter same passphrase again: [Type passphrase again]premere di nuovo Invio

Questo genererà id_rsa.pub

Passaggio 3: aggiunta della chiave SSH all'agente ssh

  1. Tipo interminale eval "$(ssh-agent -s)"
  2. Aggiungi la tua chiave SSH all'agente ssh. Se si utilizza una chiave SSH esistente anziché generare una nuova chiave SSH, sarà necessario sostituire id_rsa nel comando con il nome del file della chiave privata esistente. Immettere questo comando$ ssh-add -K ~/.ssh/id_rsa

Ora copia la chiave SSH e aggiungila anche al tuo account github

  1. Nel terminale inserisci questo comando con il nome del tuo file ssh. pbcopy < ~/.ssh/id_rsa.pubQuesto copierà il file negli Appunti. Ora apri il tuo account github Vai in Impostazioni> Chiavi SSH e GPG> Nuova chiave SSH Inserisci il titolo e incolla la chiave dagli appunti e salvala. Voila hai finito.

2
Copia utente di Windows tramite: cat ~ / .ssh / id_rsa.pub | clip
Fabii,

1
Finalmente dopo aver letto qua e là per un'ora, la soluzione passo dopo passo .... funziona benissimo. Ricorda di aggiungere la tua password github come passphrase nei passaggi, altrimenti dovrai aggiungerla manualmente ogni volta
Afshin Ghazi,

13

Ho avuto una situazione leggermente diversa, ero collegato a un server remoto e stavo usando git sul server, quando ho eseguito qualsiasi comando git ho ricevuto lo stesso messaggio

   Permission denied (publickey).
   fatal: The remote end hung up unexpectedly

Il modo in cui l'ho risolto è stato modificando il file / etc / ssh_config sul mio Mac. a partire dal

ForwardAgent no 

per

ForwardAgent yes

Si è verificato l'errore durante il tentativo di recuperare gemme da Github da una VM VirtualBox. Aggiornato il mio Vagrantfile da usareconfig.ssh.forward_agent = true , riavviato la VM e ora funziona.
Chris Bloom,

1
Potrebbe non essere la scelta migliore in termini di sicurezza secondo questo: heipei.github.io/2015/02/26/…
Papà

13

Ho incontrato lo stesso problema a causa di ero pensato che la differenza tra SSH e HTTPS è

https://github.com/USERNAME/REPOSITORY.git

ssh://github.com/USERNAME/REPOSITORY.git

Quindi sono passato da HTTPS a SSH semplicemente cambiando https://in ssh://nulla alla fine dell'URL è stato modificato.

Ma la verità è:

https://github.com/USERNAME/REPOSITORY.git

git@github.com:USERNAME/REPOSITORY.git

Il che significa che ho cambiato ssh://github.com/USERNAME/REPOSITORY.gitin git@github.com:USERNAME/REPOSITORY.gitfunziona.

Stupido errore ma la speranza aiuta qualcuno!


sì, sono passato ssh://github.com/USERNAME/REPOSITORY.gita git@github.com:USERNAME/REPOSITORY.gitfunziona.
William Hu,

Sicuro. Sto solo dicendo che non vedo il punto di menzionare l'https;)
OneCricketeer

Vedo che sshinvece di usare solo invece di httpsho appena cambiato 'https: //' in 'ssh: // `quindi ho ricevuto l'errore. Quindi cambia 'ssh: // git /../ `in' git @ .. /":) Modificato la mia risposta.
William Hu,

Per me funziona. Grazie mille! Ho provato https e poi ssh, ma continua a negare il mio accesso fino a quando non lo fai con "git clone git@github.com: /myusername/myproject.git".
Thach Van,

6

Su Windows, assicurati che tutte le tue app siano d'accordo su HOME. Msys sorprendentemente NON lo farà per te. Ho dovuto impostare una variabile d'ambiente perché ssh e git non sembravano concordare su dove fosse la mia directory .ssh.


6

Sei in un ambiente aziendale ? È possibile che le variabili di sistema siano state recentemente modificate? Per questa risposta SO, i tasti SSH vivono a %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub. Quindi, se %HOMEDRIVE%modificato di recente, git non sa dove cercare la chiave e quindi tutte le cose di autenticazione.

Prova a correre ssh -vT git@github.com. Prendi nota di dove identity filesi trova. Per me, ciò non puntava al mio normale \Users\MyLoginma piuttosto a un'unità di rete, a causa di una modifica alle variabili di ambiente spinte a livello di rete.

La soluzione? Dal momento che il mio nuovo %HOMEDRIVE%ha le stesse autorizzazioni dei miei file locali, ho appena spostato lì la mia cartella .ssh e l'ho chiamata un giorno.


questo lavoro per me. ieri la mia chiave ssh funziona ma oggi alcune impostazioni del mio sistema vengono cambiate. Aggiungo di nuovo il tasto shh e ora funziona.
Hitesh Agarwal,

6

Ragazzi, è così che ha funzionato per me:

  1. Apri il terminale e vai all'utente [Vedi l'immagine allegata]
  2. Apri la cartella .ssh e assicurati che non abbia file come id_rsa o id_rsa.pub, altrimenti a volte non riscriverà correttamente i file
  3. git --version [Verifica dell'installazione e della versione di git]
  4. git config --global user.email "il tuo ID e-mail"
  5. git config --global user.name "il tuo nome"
  6. git config --list [assicurati di aver impostato il tuo nome ed e-mail]
  7. cd ~ / .ssh
  8. ssh-keygen, richiede di salvare il file, consentirlo
  9. cat ~ / .ssh / id_rsa.pub [Accedi alla tua chiave pubblica e copia la chiave nelle impostazioni di gerrit]

Nota : non dovresti usare il comando sudo con Git. Se hai un'ottima ragione per cui devi usare sudo, assicurati di usarlo con tutti i comandi (probabilmente è meglio usare su per ottenere una shell come root a quel punto). Se generi chiavi SSH senza sudo e poi provi a usare un comando come sudo git push, non utilizzerai le stesse chiavi che hai generato

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


5

Le istruzioni GIT di base non hanno fatto riferimento alle informazioni chiave SSH. Seguendo alcuni dei link sopra, ho trovato una pagina di aiuto git che spiega, passo dopo passo, esattamente come fare questo per vari sistemi operativi (il link rileverà il tuo sistema operativo e reindirizzerà, di conseguenza):

http://help.github.com/set-up-git-redirect/

Esamina tutto il necessario per GITHub e fornisce anche spiegazioni dettagliate come "perché aggiungere una passphrase durante la creazione di una chiave RSA". Ho pensato di pubblicarlo, nel caso in cui aiuti qualcun altro ...


5

Uno dei modi più semplici

vai al terminal-

  git push <Git Remote path> --all


3

Se hai più di una chiave, potresti doverlo fare ssh-add private-keyfile


Molte grazie! Questo era davvero il mio problema.
GoGreen,

[root @ li566-238 hanjiyun] # ssh-aggiungi file-chiave-privato file-chiave-privato: nessun file o directory simile
JY Han

3

Ho riscontrato questo errore perché avevo bisogno di dare al mio attuale permesso di directory di lavoro 700:

chmod -R 700 /home/ec2-user/

3

Ho dovuto copiare le mie chiavi ssh nella cartella principale. Google Cloud Compute Engine con Ubuntu 18.04

sudo cp ~/.ssh/* /root/.ssh/

2

Ho appena riscontrato questo problema durante l'impostazione del mio progetto corrente e nessuna delle soluzioni precedenti funziona. così ho provato a cercare cosa sta realmente accadendo nell'elenco di debug usando il comando ssh -vT git@github.com. Ho notato che il mio nome file della chiave privata non è nell'elenco. quindi rinominare il nome del file della chiave privata in 'id_rsa' fare il lavoro. spero che questo possa aiutare.


Non utile nei casi in cui si utilizza la chiave "id_rsa" per qualsiasi altra cosa ....
random_user_name

2

È piuttosto semplice. Digita il comando seguente

ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"

Genera la chiave SSH. Apri il file e copia il contenuto. Vai alla pagina delle impostazioni di GitHub e fai clic sul tasto SSH. Fai clic su Aggiungi nuova chiave SSH e incolla qui il contenuto. Questo è tutto :) Non dovresti vedere di nuovo il problema.


1

Stavo ricevendo un errore Autorizzazione negata (publickey) simile durante il tentativo di eseguire un makefile.

In alternativa ai passaggi SSH precedenti, è possibile installare l'applicazione GitHub per Mac nativa.

Fai clic su Scarica GitHub per Mac da - https://help.github.com/articles/set-up-git#platform-mac

Una volta completata l'installazione con il tuo account git hub (ho anche installato gli strumenti della riga di comando di git hub ma non sono sicuro se questo passaggio è richiesto o meno), ho ricevuto un'e-mail -

[GitHub] Una nuova chiave pubblica è stata aggiunta al tuo account

e il mio errore è stato corretto.


1

Stavo ottenendo lo stesso errore. Il mio problema era mescolare in sudo.

Non sono riuscito a creare la directory in cui stavo clonando automaticamente senza prefissare il comando git clone con sudo. Quando l'ho fatto, tuttavia, i miei tasti SSH non sono stati referenziati correttamente.

Per risolvere il problema, ho impostato le autorizzazioni tramite chmod sulla directory principale che volevo contenere il mio clone in modo da poter scrivere su di esso. Quindi ho eseguito git clone SENZA un prefisso sudo. Quindi ha funzionato! Ho cambiato le autorizzazioni dopo quello. Fatto.


1

Stavo ricevendo questo errore perché ho generato le chiavi ssh con l'e-mail sbagliata. Sono stato in grado di connettermi usando ssh, ma non usando git. La soluzione è stata quella di rigenerare le chiavi utilizzando l'indirizzo e-mail principale del mio account github.


1

Ha funzionato per me.

La tua chiave pubblica viene salvata nel file id_rsa.pub; ed è la chiave che carichi sul tuo account. È possibile salvare questa chiave negli Appunti eseguendo questo:

pbcopy <~ / .ssh / id_rsa.pub

  • copia la chiave SSH negli appunti, torna al portale web.
  • Nel campo Chiave SSH, incolla la chiave SSH.
  • Nel campo Nome, fornire un nome per la chiave.
  • Salva .

1

Ha funzionato per me

ssh -i [your id_rsa path] -T github@github.com

Preferiresti spiegare perché la tua risposta avrebbe risolto il suo problema, grazie.
Muhammed Refaat,

1

La soluzione più semplice a questo, quando si tenta di eseguire il push in un repository con un nome utente diverso è:

 git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

1

Questo strano errore, nel mio caso, era un sintomo di un gnome-keyring-daemonnome errato della chiave a cui richiedeva una password.

Seguo i passaggi indicati qui e ho inserito la password tramite il terminale. L'errore, noto anche come interfaccia confusa della GUI, è stato risolto. Vedi: /ubuntu/3045/how-to-disable-gnome-keyring


1

Nel mio caso, ho reinstallato Ubuntu e il nome utente è cambiato dal precedente. In questo caso anche la chiave ssh generata differisce dalla precedente.

Il problema risolto semplicemente copiando la chiave pubblica ssh corrente, nel repository. La chiave sarà disponibile nel tuo utente/home/.ssh/id_rsa.pub


1

Nel mio MAC ho risolto questo con:

cp ~/.ssh/github_rsa ~/.ssh/id_rsa

Per qualche motivo il mio git si è fermato per trovare la chiave privata in github_rsa file. Questo è successo in un repository specifico. Voglio dire che in altri repository git ha continuato a funzionare normalmente.

Penso che sia un bug.

Potrei trovare questo comportamento in esecuzione ssh -vT git@github.com

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.