No se puede enviar al repositorio de Git en Bitbucket

143

Creé un nuevo repositorio y me encuentro con un extraño error. He usado Git antes en Bitbucket, pero acabo de formatearlo y ahora parece que no puedo hacer que Git funcione. Después de hacer una confirmación, tuve que agregar mi correo electrónico y mi nombre a los globales, pero luego se confirmó muy bien.

Cuando trato de usar el comando

git push origin master

No funciona. Recibo este mensaje:

$ 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.

Estoy perdido aquí. Mi amigo con quien estoy compartiendo este repositorio, accedió bien y lo presionó muy bien, pero parece que no puedo hacer que funcione.

Jason Dahl
fuente
44
puedes usar https en lugar de gits en tu url remota. por ejemplo: [email protected]/teamname/repository.git
Ali
1
Resolví el mismo problema siguiendo de cerca el tutorial de Atlassian sobre cómo configurar SSH en su máquina: confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git
sws
problema similar: stackoverflow.com/questions/12940626/…
JMoran

Respuestas:

229

Escribir esto para aquellos que recién comienzan con Git y BitBucket en Windows y que no están tan familiarizados con Bash (ya que este es un problema común y un resultado de Google de alto rango al buscar el mensaje de error dentro de la pregunta).

Para aquellos a quienes no les importa HTTPS y que buscan una solución rápida, desplácese hasta el final de esta respuesta para obtener instrucciones en FOR THE LAZY

Para aquellos que buscan resolver el problema real, siga las instrucciones a continuación:

Solucionar el problema de SSH lo más rápido posible

Este es un conjunto de instrucciones derivadas de la URL vinculada por VonC. Fue modificado para ser lo más resistente y sucinto posible.

  • No escriba las $líneas o ninguna que no comience $( $esto significa que es algo que escribe en GitBash).

  • Abrir GitBash

Establezca su información global si aún no lo ha hecho:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Verifique OpenSSH:

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

¿Ves algo así?

  • Sí: continuar
  • No: vaya a la sección FOR THE LAZY o siga el artículo vinculado de VonC.

Vea si ya ha generado las claves:

$ ls -a ~/.ssh/id_*

Si hay dos archivos, puede omitir el siguiente paso.

$ ssh-keygen

Deje todo como predeterminado, ingrese una frase de contraseña. Ahora debería ver resultados con este comando:

$ ls -a ~/.ssh/id_*

Busque un archivo de configuración existente:

$ ls -a ~/.ssh/config

Si obtiene un resultado, consulte este archivo para obtener información errónea. Si no existe ningún archivo, haga lo siguiente:

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

Confirmar los contenidos:

$ cat ~/.ssh/config

Host bitbucket.org
 IdentityFile ~/.ssh/id_rsa
  • Se requiere el espacio único antes de "IdentityFile".

Compruebe que está iniciando el agente SSH cada vez que ejecuta GitBash:

$ cat ~/.bashrc
  • Si ve una función llamada start_agent, este paso ya se ha completado.
  • Si no hay archivo, continúe.
  • Si hay un archivo que no contiene esta función, está en una situación difícil. Probablemente sea seguro agregarlo (usando las instrucciones a continuación), ¡pero puede que no lo sea! Si no está seguro, haga una copia de seguridad de su .bashrc antes de seguir las instrucciones a continuación o pase a la sección FOR THE LAZY .

Ingrese lo siguiente en GitBash para crear su archivo .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

Verifique que el archivo se haya creado correctamente (el suyo solo debe diferir donde aparezca "su nombre de usuario"):

$ 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
  • Cierre GitBash y vuelva a abrirlo.
  • Se le debe solicitar su frase de contraseña (para el archivo SSH que generó anteriormente).
  • Si no aparece ningún mensaje, no configuró una frase de contraseña o GitBash no está ejecutando el script .bashrc (¡lo cual sería extraño, así que considere revisar su contenido!). Si está ejecutando esto en una Mac (OS X), .bashrcno se ejecuta de forma predeterminada, .bash_profilees. Para solucionar esto, coloque este fragmento en su .bash_profile:[[ -s ~/.bashrc ]] && source ~/.bashrc

Si no ingresó una frase de contraseña, habría visto algo como esto al iniciar GitBash:

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

Y lo siguiente debería devolver resultados:

$ ssh-add -l

Sin embargo, si obtiene lo siguiente de ssh-add -l:

Could not open a connection to your authentication agent.

No generó el agente SSH y su .bashrc es probablemente la causa.

Si, al iniciar GitBash, ves esto:

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

Eso significa que olvidó escapar de $ con a \ al hacer eco en el archivo (es decir, las variables se expandieron). Vuelva a crear su .bashrc para resolver esto.

Verifique que el agente se esté ejecutando y que se hayan agregado sus claves:

$ ssh-add -l

Debería devolver algo similar a esto:

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

Ejecute el siguiente comando para obtener su clave pública:

$ cat ~/.ssh/id_rsa.pub

(debería devolver algo que comience con "ssh-rsa ......"

  • Haga clic en el icono de la ventana de GitBash
  • Haz clic en Editar
  • Haga clic en marcar
  • Resalte la clave pública con el mouse (incluido el ssh-rsabit inicial y el == [email protected]bit final )
  • Haga clic derecho en la ventana (realiza una copia)
  • Pegue su clave pública en el Bloc de notas.
  • Elimine todas las líneas nuevas de modo que sea solo una línea.
  • Presione CTRL+Aluego CTRL+Cpara copiar la clave pública nuevamente en su portapapeles.

Configure su clave privada con BitBucket realizando los siguientes pasos:

  • Abra su navegador y navegue al sitio BitBucket.org
  • Inicie sesión en BitBucket.org
  • Haz clic en tu avatar (arriba a la derecha)
  • Haga clic en Administrar cuenta
  • Haga clic en Claves SSH (en Seguridad en el menú de la izquierda)
  • Haga clic en Agregar clave
  • Ingrese Global Public Keypor la etiqueta
  • Pegue la clave pública que copió del Bloc de notas

Una Global Public Keyentrada ahora debería estar visible en su lista de claves.

  • Regresar a GitBash
  • cd en el directorio que contiene su proyecto
  • Cambie su origen a la variación SSH (no será así si ejecutó los pasos FOR THE LAZY )

Revisa tus controles remotos:

$ git remote -v

Cambie a la URL de SSH:

$ git remote set-url origin [email protected]:youraccount/yourproject.git

Verifique que las cosas estén funcionando:

$ git remote show origin

Debería ver algo como esto:

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

¡HECHO!

Puede optar por usar HTTPS en lugar de SSH. Tendrá que escribir su contraseña durante las operaciones remotas (se almacena en caché temporalmente después de que la escriba una vez). Aquí es cómo puede configurar HTTPS:

Para los perezosos

Debe solucionar el problema de SSH como lo describe VonC; sin embargo, si tiene prisa por comprometerse y no tiene las herramientas / tiempo / conocimiento para generar una nueva clave pública en este momento , establezca su origen en la alternativa HTTPS:

> https://[email protected]/accountname/reponame.git

Usando una herramienta GUI como TortoiseGit o herramientas de línea de comando .

Aquí está la documentación de esta URL de origen alternativa.

Línea de comando para agregar un origen si no existe:

git remote add origin https://[email protected]/accountname/reponame.git

Línea de comando para cambiar un origen existente:

git remote set-url origin https://[email protected]/accountname/reponame.git

NOTA: su nombre de cuenta no es su correo electrónico.

También es posible que desee configurar su información global:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

Luego intente presionar nuevamente (no es necesario comprometerse nuevamente)

git push origin master
Graeme Wicksted
fuente
echo "Host bitbucket.org" >> ~ / .ssh.config, no debería durar '.' ser un '/'?
Peter
1
En algún momento sucede que ha agregado todo lo mencionado anteriormente, ~/.bashrcpero aún cuando ejecuta el comando. ssh-all -lTodavía se muestra. No agent En ese caso, intente este comando ssh-agent /bin/bashy esoInitializing new SSH agent...
shinesecret
55
Una de las mejores respuestas que he encontrado en StackOverflow
Sambhav Sharma
1
@JGallardo - ¡Buena pregunta! La buena noticia es no. Esas son variables en los scripts de shell bash: son similares a las variables de entorno en los archivos por lotes.
Graeme Wicksted
1
El hecho de que esta no sea la respuesta aceptada me duele el corazón. Gran redacción!
ruby_newbie
58

Este error también ocurre si olvidó agregar la clave privada ssh-agent. Haz esto con:

ssh-add ~/.ssh/id_rsa
Matthias Braun
fuente
44
Fue la respuesta en mi caso, algo que siempre olvido cuando creo una nueva clave.
amertkara
1
Esto fue lo que ayudó después de pasar por la publicación anterior
Tony Merritt
funcionó para mí :) pero debe asegurarse de que ya tiene una clave privada ssh en su directorio local y una clave pública registrada en su cuenta de bitbucket
Daniel
25

Reformateado significa que probablemente eliminó sus claves ssh públicas y privadas (en ~ / .ssh).

Debe regenerarlos y publicar su clave ssh pública en su perfil de BitBucket, como se documenta en " Usar el protocolo SSH con Bitbucket ", después de " Configurar SSH para Git con GitBash ".

Cuentas-> Administrar cuentas-> Claves SSH:

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

Luego:

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

Imágenes de " Integración de Mercurial / BitBucket con el software JetBrains "

VonC
fuente
77
Solo para agregar un poco a esto. Asegúrese de que si usa BitBucket (como se muestra en la captura de pantalla), agregue la clave SSH a las claves SSH de su cuenta (Cuentas-> Administrar cuentas-> Claves SSH). Agregarlo como una clave de implementación a través de la configuración del repositorio solo permitirá que esa clave se use para operaciones de solo lectura (sin compromiso).
welshk91
@ welshk91 Estoy de acuerdo. He modificado la respuesta para agregar imágenes más detalladas.
VonC
1
@VonC: gracias por publicar esto. He intentado en vano que esto funcione en una máquina con Windows, y finalmente funcionó. Gracias, Ben
ben18785
21

Resolví esto quitando el control remoto usando el comando:

git remote remove origin

y luego traté de agregar control remoto usando https url en lugar de ssh

git remote add origin httpsUrl

Pide credenciales de github. Ingrese las credenciales e intente presionar para usar usando:

git push origin master
Ankit Arora
fuente
1
Esto me ayudó. Esta es la respuesta correcta en mi caso. gracias
binsnoel
Esto funciona para mi. No
eliminé el
Gracias por la respuesta directa. Funcionó como un encanto: era exactamente lo que estaba buscando.
Alexandra
4

Yo tuve el mismo problema. Mis claves SSH se configuraron correctamente. Solucioné este problema así.

Después de crear un nuevo proyecto en Bitbucket, use clone. Ingrese el comando de clonación en la terminal y debería clonar un proyecto vacío en su computadora. Después de eso, puede copiar sus archivos a este directorio y comenzar a comprometerse y empujar a bitbucket.

Rafael
fuente
1
Que extraño. Tuve el mismo problema que el OP hoy, pero sin haber realizado una reinstalación o cambios en el sistema, mis claves estaban bien. El git remote addproceso simplemente no funcionó hoy; recibí el error de autenticación al intentar presionar, pero eliminar .git y luego usar git cloney volver a copiar mi fuente (solo un README.md) funciona bien. Gracias Rafael. Ciertamente no hubiera pensado probar eso si no fuera por tu respuesta.
kris
me alegro de que esta solución te haya ayudado
Rafael
1
Gracias por tu respuesta. Pude corregir el problema simplemente creando un nuevo directorio y clonando en ese nuevo directorio. mkdir /tmp/JUNK; cd /tmp/JUNK; git clone ...; cd ..; rm -rf JUNK
Red Cricket
2

Dos pequeñas aclaraciones que podrían salvar a alguien la confusión por la que pasé:

1 - Las URL de conexión difieren para HTTPS y SSH

Cuando se conecta a través de https, usa

https://[email protected]/owner-account/repo-name.git

sin embargo, cuando se conecta a través de SSH, el nombre de la cuenta siempre es "git"

ssh://[email protected]/owner-account/repo-name.git

Intentar conectarse a SSH con el nombre de su cuenta en el frente dará lugar al error que recibió el póster original. Así es como puede hacer la prueba de conexión a git @, luego intente por error con su nombre de usuario y vea un error.

2 - Las claves SSH a través de las cuentas del equipo quedarán en desuso en 2017

Si está configurando claves SSH en cuentas de equipo, recomiendan cambiarlas a cuentas personales. Un consejo útil para evitar e

Paulo
fuente
1

Si está usando SourceTree (estoy usando 2.4.1), encontré una forma más simple de generar una clave SSH y agregarla a mi configuración de Bitbucket. Esto resolvió mi problema.

  1. En SourceTree, vaya a Preferencias.
  2. Vaya a la pestaña Cuentas y seleccione su cuenta.
  3. Debe haber una opción para generar y copiar una clave SSH al portapapeles.
  4. Una vez que haya copiado eso, vaya a Bitbucket en su navegador. Vaya a [avatar] -> Configuración de Bitbucket.
  5. Ir a las claves SSH.
  6. Haga clic en Agregar clave
  7. Pegue la clave que copió.

Recibí un correo electrónico de confirmación de Bitbucket de que se había agregado una clave SSH a mi cuenta.

Como referencia, en macOS, usando Terminal, puede usar el siguiente comando para ver las claves generadas para su dispositivo. Aquí es donde se almacena la clave que generó.

ls -la ~/.ssh

Como otros han dicho, esta documentación me ayudó: Usar el protocolo SSH con Bitbucket Cloud

Sarah
fuente
1

Realice el ssh como en el tutorial de Atlassian y asegúrese de que la clave privada se pegue en el perfil, no en el repositorio :)

Héctor
fuente
¿Podría incluir un enlace a lo indicado Atlassian tutorial? ¿Cuáles son los pasos para pegar la clave en el perfil y cómo sé si está pegada en el repositorio?
EmmanuelB
Ella esta aqui. ¡Seleccione la mejor opción para su combinación de estuches! confluence.atlassian.com/bitbucket/…
Héctor
0

Obtuve este mismo error para un repositorio: de repente, todos los demás funcionaban y todavía funcionan bien cuando intento empujar confirmaciones. El problema parecía estar en la clave SSH (como ya sabe por los comentarios anteriores): en bitbucket, vaya a y View Profileluego haga clic Manage Account.

En el lado izquierdo, haga clic en y SSH Keysluego agregue el que tiene en su sistema en el directorio ~ / .ssh /.

Si aún no tiene uno generado, use las instrucciones de una de las publicaciones, pero asegúrese de usar el archivo id_dsa.pub predeterminado o uno personalizado, y luego requerirá la -iopción con la ruta a la clave cuando conectar es decir

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

Una vez que haya agregado su clave local a su cuenta en bitbucket, podrá comenzar a interactuar con su repositorio.

Sebastian Sulinski
fuente
0

Encontré que la solución que mejor funcionó para mí fue dividir el empuje en trozos más pequeños.

y eliminar los archivos de imagen de captura de pantalla grandes (10mb +) de las confirmaciones

La seguridad no fue un problema al final más sobre los límites de los archivos bin

Harry Bosh
fuente
¿Recibió el error anterior, señalado por el OP, y no fue un problema de autenticación / seguridad? ¿Era del tamaño de tu compromiso?
JohnZaj
Eso es lo que sucedió
Harry Bosh
0

Este error también aparece cuando el repositorio no existe. Intenté todas las respuestas hasta que vi que al nombre del repositorio le faltaba un guión

Mirko
fuente
0

Por errores:

[error] acceso al repositorio denegado. El acceso a través de una clave de implementación es de solo lectura. fatal: no se pudo leer desde el repositorio remoto. Asegúrese de tener los derechos de acceso correctos y de que exista el repositorio.

[error] fatal: no se pudo leer desde el repositorio remoto.

[error] fatal: no se puede encontrar el ayudante remoto para 'https'

Resolví siguiendo estos pasos:

Primero instale estas dependencias:

$ yum install expat expat-devel openssl openssl-devel

Luego elimine git:

$ yum remove git git-all

Ahora compila e instala Git en la última versión, en este 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/

Luego para la configuración:

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

Y finalmente instalar así:

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

eso es todo, ahora configura tu repositorio con https:

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

si ha configurado una clave ssh en su servidor remoto, debe eliminarla.

Johan Morales
fuente
0

Recibí este error

Conexión a bitbucket.org cerrada por host remoto. fatal: no se pudo leer desde el repositorio remoto. Asegúrese de tener los derechos de acceso correctos.

Entonces lo intenté

git config --global user.email "[email protected]"

Trabajó sin comillas.

Vkreddy Komatireddy
fuente
0

Encontré que la línea de comando git no me gustaba que mi concurso generara claves (Windows 10).

Ver mi respuesta en Serverfault

HostMyBus
fuente
0

Estoy usando macOS y aunque configuré mi clave pública en bitbucket la próxima vez que intenté presionar, obtuve

acceso al repositorio denegado.

fatal: no se pudo leer desde el repositorio remoto.

Asegúrese de tener los derechos de acceso correctos y de que exista el repositorio.

Lo que tenía que hacer era el Paso 2. Agregue la clave al agente ssh como se describe en la guía de configuración de claves SSH de Bitbucket y especialmente el tercer paso:

(solo macOS) Para que su computadora recuerde su contraseña cada vez que se reinicia, abra (o cree) el archivo ~ / .ssh / config y agregue estas líneas al archivo:

Host *
UseKeychain sí

Espero que ayude a un usuario de Mac con el mismo problema.

Sstauross
fuente
0

Tuve este problema y pensé que estaba loco. He estado usando SSH durante 20 años. y git sobre SSH desde 2012 ... pero ¿por qué no podría recuperar mi repositorio de bitbucket en la computadora de mi casa?

bueno, tengo dos cuentas de bitbucket y tenía 4 claves SSH cargadas dentro de mi agente. incluso si mi .ssh / config se configuró para usar la clave correcta. cuando ssh estaba inicializando la conexión, los estaba usando en orden cargado en el agente. así que me estaba registrando en mi cuenta personal de bitbucket.

luego aparece un error prohibido al intentar obtener el repositorio. tiene sentido.

Descargué la llave del agente

ssh-add -d ~/.ssh/personal_rsa

entonces podría buscar los repositorios.

... Más tarde descubrí que puedo forzarlo a usar solo la identidad especificada

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

No sabía sobre esa última opción IdentitiesOnly

de la documentación de bitbucket en sí

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

Mathieu J.
fuente
-1

Sólo inténtalo

git remote add origin <HTTP URL>
Ashok Joshi
fuente
1
no nos gusta escribir nombre de usuario / contraseña cada vez que buscamos / insertamos en bitbucket / github / etc /
Mathieu J.