Impossibile eseguire il push nel repository Git su Bitbucket


143

Ho creato un nuovo repository e sto riscontrando uno strano errore. Ho usato Git prima su Bitbucket ma ho appena riformattato e ora non riesco a far funzionare Git. Dopo aver fatto un commit, ho dovuto aggiungere la mia e-mail e il mio nome ai globi, ma poi ha funzionato bene.

Quando provo ad usare il comando

git push origin master

non funziona. Ricevo questo messaggio:

$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Sono in perdita qui. Il mio amico con cui sto condividendo questo repository, l'ha acceduto e ci ha spinto bene, ma non riesco a farlo funzionare.


4
puoi usare https invece di gits nell'URL remoto. ad es .: tuonomeutente@bitbucket.org/teamname/repository.git
Ali

1
Ho risolto lo stesso problema seguendo da vicino il tutorial di Atlassian su come impostare SSH sulla tua macchina: confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git
sws

Risposte:


229

Scrivere questo per coloro che hanno appena iniziato a utilizzare Git e BitBucket su Windows e che non hanno familiarità con Bash (poiché si tratta sia di un problema comune che di un risultato Google di alto livello durante la ricerca del messaggio di errore all'interno della domanda).

Per coloro a cui non importa HTTPS e che sono alla ricerca di una soluzione rapida, scorrere fino alla fine di questa risposta per le istruzioni in FOR THE LAZY

Per coloro che desiderano risolvere il problema reale, seguire le istruzioni seguenti:

Risolvere il problema SSH il più velocemente possibile

Questo è un insieme di istruzioni derivate dall'URL collegato da VonC. È stato modificato per essere il più resistente e succinto possibile.

  • Non digitare la $o le righe che non iniziano con $( $significa che questo è qualcosa che digiti in GitBash).

  • Apri GitBash

Imposta le tue informazioni globali se non hai già:

$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

Verifica OpenSSH:

$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...

Vedi qualcosa del genere?

  • Sì: continua.
  • No: passa alla sezione FOR THE LAZY o segui l'articolo collegato da VonC.

Vedi se hai già generato le chiavi:

$ ls -a ~/.ssh/id_*

Se sono presenti due file, è possibile saltare il passaggio successivo.

$ ssh-keygen

Lasciare tutto come predefinito, inserire una passphrase. Ora dovresti vedere i risultati con questo comando:

$ ls -a ~/.ssh/id_*

Verifica la presenza di un file di configurazione esistente:

$ ls -a ~/.ssh/config

Se ottieni un risultato, controlla questo file per informazioni errate. Se non esiste alcun file, attenersi alla seguente procedura:

$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config

Conferma il contenuto:

$ cat ~/.ssh/config

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa
  • È richiesto lo spazio singolo prima di "IdentityFile".

Verifica di avviare l'agente SSH ogni volta che esegui GitBash:

$ cat ~/.bashrc
  • Se vedi una funzione chiamata start_agent, questo passaggio è già stato completato.
  • Se nessun file, continua.
  • Se esiste un file che non contiene questa funzione, ci si trova in una situazione difficile. Probabilmente è sicuro aggiungerlo (usando le istruzioni qui sotto) ma potrebbe non esserlo! Se non sei sicuro, esegui un backup del tuo .bashrc prima di seguire le istruzioni riportate di seguito o passa alla sezione FOR THE LAZY .

Immettere quanto segue in GitBash per creare il file .bashrc:

$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo "    echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo "    # spawn ssh-agent" >> ~/.bashrc
$ echo "    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    echo succeeded" >> ~/.bashrc
$ echo "    chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo "    . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "    /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo "     . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo "     ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo "        start_agent;" >> ~/.bashrc
$ echo "    }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo "    start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc

Verifica che il file sia stato creato correttamente (il tuo dovrebbe differire solo dove appare il "tuo nome utente"):

$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi
  • Chiudi GitBash e riaprilo.
  • Dovresti ricevere la passphrase (per il file SSH generato in precedenza).
  • Se nessun prompt, o non hai impostato una passphrase o GitBash non esegue lo script .bashrc (il che sarebbe strano, quindi considera di rivederne il contenuto!). Se lo stai eseguendo su un Mac (OS X), .bashrcnon viene eseguito per impostazione predefinita .bash_profile. Per risolvere questo problema, inserisci questo snippet nel tuo .bash_profile:[[ -s ~/.bashrc ]] && source ~/.bashrc

Se non avessi inserito una passphrase, avresti visto qualcosa di simile all'avvio di GitBash:

Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)

E quanto segue dovrebbe restituire risultati:

$ ssh-add -l

Tuttavia, se si ottiene quanto segue da ssh-add -l:

Could not open a connection to your authentication agent.

Non ha generato l'agente SSH e il tuo .bashrc è probabilmente la causa.

Se, all'avvio di GitBash, vedi questo:

Initializing new SSH agent...
sh.exe": : No such file or directory

Ciò significa che hai dimenticato di sfuggire a $ con un \ durante l'eco al file (cioè le variabili sono state espanse). Ricrea il tuo .bashrc per risolverlo.

Verifica che l'agente sia in esecuzione e che le tue chiavi siano state aggiunte:

$ ssh-add -l

Dovrebbe restituire qualcosa di simile a questo:

2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)

Eseguire il comando seguente per ottenere la chiave pubblica:

$ cat ~/.ssh/id_rsa.pub

(dovrebbe restituire qualcosa che inizia con "ssh-rsa ......"

  • Fai clic sull'icona della finestra di GitBash
  • Fai clic su Modifica
  • Fai clic su Segna
  • Evidenzia la chiave pubblica usando il mouse (incluso il ssh-rsabit iniziale e il == youremail@yourdomain.combit finale )
  • Fare clic con il tasto destro del mouse sulla finestra (esegue una copia)
  • Incolla la tua chiave pubblica in Blocco note.
  • Elimina tutte le nuove righe in modo che sia solo una singola riga.
  • Premere CTRL+Aquindi CTRL+Cper copiare nuovamente la chiave pubblica negli Appunti.

Configura la tua chiave privata con BitBucket procedendo come segue:

  • Apri il tuo browser e vai al sito BitBucket.org
  • Accedi a BitBucket.org
  • Fai clic sul tuo avatar (in alto a destra)
  • Fai clic su Gestisci account
  • Fai clic su Chiavi SSH (sotto Sicurezza nel menu a sinistra)
  • Fai clic su Aggiungi chiave
  • Inserisci Global Public Keyper l'etichetta
  • Incolla la chiave pubblica che hai copiato dal Blocco note

Una Global Public Keyvoce dovrebbe ora essere visibile nel tuo elenco di chiavi.

  • Ritorna a GitBash
  • cd nella directory contenente il tuo progetto
  • Cambia la tua origine con la variazione SSH (non lo sarà se hai eseguito i passaggi FOR THE LAZY )

Controlla i telecomandi:

$ git remote -v

Passa all'URL SSH:

$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git

Verifica che le cose funzionino:

$ git remote show origin

Dovresti vedere qualcosa del genere:

Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
  Fetch URL: git@bitbucket.org:youruser/yourproject.git
  Push  URL: git@bitbucket.org:youruser/yourproject.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

FATTO!

Puoi scegliere di utilizzare HTTPS anziché SSH. Sarà necessario digitare la password durante le operazioni remote (viene temporaneamente memorizzata nella cache dopo averla digitata una volta). Ecco come è possibile configurare HTTPS:

PER I PIGATI

Dovresti risolvere il problema SSH come descritto da VonC; tuttavia, se hai fretta di impegnarti e non hai gli strumenti / il tempo / le conoscenze per generare una nuova chiave pubblica in questo momento , imposta la tua origine sull'alternativa HTTPS:

> https://accountname@bitbucket.org/accountname/reponame.git

Utilizzo di uno strumento GUI come TortoiseGit o strumenti da riga di comando .

Ecco la documentazione di questo URL di origine alternativo.

Riga di comando per aggiungere un'origine se non esiste:

git remote add origin https://accountname@bitbucket.org/accountname/reponame.git

Riga di comando per modificare un'origine esistente:

git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git

NOTA: il nome del tuo account non è la tua email.

Potresti anche voler impostare le tue informazioni globali:

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

Quindi riprovare a premere (non è necessario impegnarsi nuovamente)

git push origin master

echo "Host bitbucket.org" >> ~ / .ssh.config, non dovrebbe durare '.' essere un '/'?
Peter,

1
A volte succede che hai aggiunto tutto quanto sopra menzionato ~/.bashrcma ancora quando esegui il comando ssh-all -lMostra ancora No agent In quel caso prova questo comando ssh-agent /bin/bashe lo faràInitializing new SSH agent...
shinesecret

5
Una delle migliori risposte che abbia mai trovato su StackOverflow
Sambhav Sharma il

1
@JGallardo - Bella domanda! La buona notizia è no. Queste sono variabili negli script della shell bash - sono simili alle variabili di ambiente nei file batch.
Graeme Wicksted,

1
Il fatto che questa non sia la risposta accettata mi fa male al cuore. Grande riscrittura!
ruby_newbie,

58

Questo errore si verifica anche se hai dimenticato di aggiungere la chiave privata a ssh-agent. Fallo con:

ssh-add ~/.ssh/id_rsa

4
Era la risposta nel mio caso, qualcosa che dimentico sempre quando creo una nuova chiave.
Amertkara,

1
Questo è stato ciò che ha aiutato dopo aver esaminato il post sopra
Tony Merritt il

ha funzionato per me :) ma devi assicurarti di avere già la chiave privata ssh nella tua directory locale e la chiave pubblica registrata nel tuo account bitbucket
Daniel

26

Riformattato significa che probabilmente hai eliminato le tue chiavi ssh pubbliche e private (in ~ / .ssh).

Devi rigenerarli e pubblicare la tua chiave ssh pubblica sul tuo profilo BitBucket, come documentato in " Usa il protocollo SSH con Bitbucket ", seguendo " Configura SSH per Git con GitBash ".

Account-> Gestisci account-> Chiavi SSH:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_manage_account.png

Poi:

http://solvedproblems.hydex11.net/_media/solved-problems/crazy-problems/bitbucket_add_ssh.png

Immagini da " Integrazione di Mercurial / BitBucket con il software JetBrains "


8
Solo per aggiungere un po 'a questo. Assicurati di utilizzare BitBucket (come mostrato nella schermata) per aggiungere la chiave SSH alle chiavi SSH del tuo account (Account-> Gestisci account-> Chiavi SSH). Aggiungendolo come chiave di distribuzione tramite le impostazioni del repository, tale chiave verrà utilizzata solo per operazioni di sola lettura (senza commit).
welshk91,

@ welshk91 Sono d'accordo. Ho modificato la risposta per aggiungere immagini più dettagliate.
VonC,

1
@VonC - grazie per aver pubblicato questo. Ho cercato invano di farlo funzionare su una macchina Windows, e alla fine ha funzionato. Grazie, Ben
ben18785,

21

Ho risolto questo rimuovendo il telecomando usando il comando:

git remote remove origin

e poi ho provato ad aggiungere il telecomando usando https url invece di ssh

git remote add origin httpsUrl

Chiede credenziali github. Immettere le credenziali e quindi provare a spingere per git usando:

git push origin master

1
questo mi ha aiutato. questa è la risposta corretta nel mio caso. grazie
binsnoel

Per me funziona. Non ho rimosso l'origine, ne ho appena aggiunto uno nuovo
shintaroid il

Grazie per la risposta diretta. Ha funzionato come un fascino - era esattamente quello che stavo cercando.
Alexandra,

4

Ho avuto lo stesso problema. Le mie chiavi SSH sono state impostate correttamente. Ho risolto questo problema in questo modo.

Dopo aver creato un nuovo progetto in Bitbucket, usa clone. Immettere il comando di clonazione nel terminale e dovrebbe clonare il progetto vuoto sul computer. Dopodiché puoi copiare i tuoi file in questa directory e iniziare a eseguire il commit e il push su bitbucket.


1
Che strano. Ho avuto lo stesso problema dell'OP oggi, ma senza aver effettuato una reinstallazione o apportato modifiche al sistema, le mie chiavi andavano bene. Il git remote addprocesso oggi non ha funzionato - ho avuto l'errore di autenticazione quando ho provato a spingere - ma l'eliminazione di .git e quindi l'utilizzo e il ricopio del git clonemio sorgente (solo un file README.md) invece funziona correttamente. Grazie Rafael - Certamente non avrei pensato di provarlo se non fosse per la tua risposta.
Kris,

felice che questa soluzione ti abbia aiutato
Rafael,

1
Grazie per la tua risposta. Sono stato in grado di correggere il problema semplicemente creando una nuova directory e clonando in quella nuova directory. mkdir /tmp/JUNK; cd /tmp/JUNK; git clone ...; cd ..; rm -rf JUNK
Red Cricket,


2

Due piccoli chiarimenti che potrebbero salvare qualcuno la confusione che ho attraversato:

1 - Gli URL di connessione differiscono per HTTPS e SSH

Quando ci si collega tramite https, si utilizza

https://your_account_name@bitbucket.org/owner-account/repo-name.git

tuttavia quando ci si connette tramite SSH, il nome dell'account è sempre "git"

ssh://git@bitbucket.org/owner-account/repo-name.git

Tentare di connettersi a SSH con il nome dell'account in primo piano porterà all'errore ricevuto dal poster originale. Ecco come si può fare il test connettendosi a git @, quindi provare erroneamente con il tuo nome utente e vedere un errore.

2 - Le chiavi SSH tramite account team saranno deprecate nel 2017

Se stai impostando le chiavi SSH sugli account del team, ti consigliano di passare agli account personali. Un consiglio utile per evitare e


1

Se stai usando SourceTree (sto usando 2.4.1), ho trovato un modo più semplice per generare una chiave SSH e aggiungerla alle mie impostazioni di Bitbucket. Questo ha risolto il problema per me.

  1. In SourceTree, vai su Preferenze.
  2. Vai alla scheda Account e seleziona il tuo account.
  3. Dovrebbe esserci un'opzione per generare e copiare una chiave SSH negli Appunti.
  4. Dopo averlo copiato, vai su Bitbucket nel tuo browser. Vai a [avatar] -> Impostazioni Bitbucket.
  5. Vai alle chiavi SSH.
  6. Fai clic su Aggiungi chiave
  7. Incolla la chiave che hai copiato.

Ho ricevuto un'email di conferma da Bitbucket che una chiave SSH era stata aggiunta al mio account.

Per riferimento, su macOS, usando Terminale, puoi usare il seguente comando per vedere le chiavi generate per il tuo dispositivo. Qui è dove viene memorizzata la chiave generata.

ls -la ~/.ssh

Come altri hanno già affermato, questa documentazione mi ha aiutato: utilizzare il protocollo SSH con Bitbucket Cloud


1

Fai ssh come nel tutorial di Atlassian e assicurati che la chiave privata sia incollata nel profilo, non nel repository :)


Potresti includere un link a quanto dichiarato Atlassian tutorial? Quali sono i passaggi per incollare la chiave nel profilo e come faccio a sapere se viene incollata nel repository?
EmmanuelB

Lei è proprio qui. Seleziona la scelta migliore per la tua combinazione di custodie! confluence.atlassian.com/bitbucket/…
Hector

0

Ho avuto lo stesso errore per un repository - improvvisamente, tutti gli altri sono stati e funzionano ancora bene quando sto cercando di spingere commit. Il problema sembrava essere con la chiave SSH (come già sai dai commenti precedenti) - su bitbucket vai a View Profilequindi fai clic Manage Account.

Sul lato sinistro fare clic su, SSH Keysquindi aggiungere quello presente sul proprio sistema nella directory ~ / .ssh /.

Se non ne hai ancora generato uno, utilizza le istruzioni di uno dei post, ma assicurati di utilizzare il file id_dsa.pub predefinito o il nome personalizzato, in seguito richiederai l' -iopzione con il percorso della chiave quando connettersi ad es

ssh -i ~/.ssh/customkeyname username@ip_address

Dopo aver aggiunto la chiave locale al tuo account su bitbucket, sarai in grado di iniziare a interagire con il tuo repository.


0

Ho scoperto che la soluzione che ha funzionato meglio per me è stata quella di spezzare la spinta in pezzi più piccoli.

e rimuovendo i grandi file immagine di screenshot (10mb +) dai commit

Alla fine, la sicurezza non era più un problema di limiti dei file bin


Viene visualizzato l'errore sopra riportato, rilevato dall'OP, e non è stato un problema di autenticazione / sicurezza? Era la dimensione del tuo commit?
JohnZaj,

È quello che è successo
Harry Bosh,

0

Questo errore viene visualizzato anche quando il repository non esiste. Ho provato tutte le risposte finché non ho visto il nome del repository mancava un trattino


0

Per errori:

[errore] accesso al repository negato. l'accesso tramite una chiave di distribuzione è di sola lettura. fatale: impossibile leggere dal repository remoto. Assicurarsi di disporre dei diritti di accesso corretti e che il repository esista.

[errore] fatale: impossibile leggere dal repository remoto.

[errore] fatale: impossibile trovare l'helper remoto per 'https'

Ho risolto seguendo questi passaggi:

Prima installa questa dipendenza:

$ yum install expat expat-devel openssl openssl-devel

Quindi rimuovere git:

$ yum remove git git-all

Ora costruisci e installa Git sull'ultima versione, in questo caso:

$ wget https://github.com/git/git/archive/v2.13.0.tar.gz
$ tar zxf v.2.13.0.tar.gz
$ cd git-2.13.0/

Quindi per la configurazione:

$ make configure
$ ./configure --with-expat --with-openssl

E infine installare in questo modo:

$ make 
$ make install install-doc install-html install-info

tutto qui, ora configura il tuo repository con https:

$ git remote add origin https://github.com/*user*/*repo*.git
# Verify new remote
$ git remote -v

se hai configurato una chiave ssh nel tuo server remoto devi eliminarla.


0

Ho ricevuto questo errore

Connessione a bitbucket.org chiusa dall'host remoto. fatale: impossibile leggere dal repository remoto. Assicurati di disporre dei diritti di accesso corretti.

Poi ho provato

git config --global user.email "tu@esempio.com"

lavorato senza virgolette.


0

Ho scoperto che la riga di comando git non mi piaceva le chiavi generate dal mio spettacolo (Windows 10).

Vedi la mia risposta su Serverfault


0

Sto usando macOS e sebbene avessi impostato la mia chiave pubblica in bitbucket la prossima volta che ho provato a spingere ho ottenuto

accesso al repository negato.

fatale: impossibile leggere dal repository remoto.

Assicurarsi di disporre dei diritti di accesso corretti e che il repository esista.

Quello che ho dovuto fare è stato il passaggio 2. Aggiungere la chiave all'agente ssh come descritto nella guida all'installazione delle chiavi SSH di Bitbucket e in particolare il terzo passaggio:

(solo macOS) In modo che il computer ricordi la password ogni volta che si riavvia, apri (o crea) il file ~ / .ssh / config e aggiungi queste righe al file:

Host *
UseKeychain yes

Spero che aiuti un utente Mac con lo stesso problema.



0

Ho avuto questo problema e pensavo di essere pazzo. Uso SSH da 20 anni. e git su SSH dal 2012 ... ma perché non ho potuto recuperare il mio repository bitbucket sul mio computer di casa?

bene, ho due account bitbucket e avevo 4 chiavi SSH caricate nel mio agente. anche se mio .ssh / config è stato configurato per usare il tasto giusto. quando ssh stava inizializzando la connessione, li stava usando nell'ordine caricato nell'agente. quindi stavo per accedere al mio account bitbucket personale.

quindi viene visualizzato un errore proibito durante il tentativo di recuperare il repository. ha senso.

Ho scaricato la chiave dall'agente

ssh-add -d ~/.ssh/personal_rsa

allora potrei recuperare i repository.

... Più tardi ho scoperto che posso costringerlo a usare solo l'identità specificata

 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

Non sapevo di quest'ultima opzione IdentitiesOnly

dalla stessa documentazione di bitbucket

https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/


-1

Prova

git remote add origin <HTTP URL>

1
non ci piace digitare username / password ogni volta che prendiamo / spingiamo in bitbucket / github / etc /
Mathieu J.
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.