IronWoods.es

Desarrollo web

Blog / Git / Error clave pública SSH: permiso denegado

Solución a "Error: Permission denied (publickey)" con Git

Esto va a ir en dos partes, no complementarias, la corta y la larga. Elige según el tiempo que tengas disponible y tu grado de curiosidad. La solución aportada fue probada en Bitbucket.


Cuestiones generales a tener el cuenta:

Lo primero sería entender ¿por qué aparece éste "error"? Lo que Git, básicamente, viene a decirte es que no tienes acceso a tu repositorio remoto. La razón: tu clave SSH (local), si es que existe, no esta registrada en tu repositorio remoto.

¿Dónde están estas claves en Windows? La ruta habitual será: C:\Users\tu-usuario\.ssh\

¿Cómo generar una clave pública SSH? Manual de Git

Versión corta

Problema

Al tratar de hacer un push al repositorio remoto aparece el mensaje: "Error: Permission denied (publickey)"

Solución

En la configuración de la propia cuenta de Bitbucket, no del repositorio, hay donde añadir la clave SSH pública que tienes en tu máquina. Esto da pleno acceso a todos los repositorios de la cuenta desde el equipo que contiene la clave SSH que añadas. Puedes añadir tantas claves como equipos usas para trabajar con tus repositorios.

Para las personas aburridas y/o curiosas

En informática todo son problemas, lo reconozco. Al programar, si los encuentras estrictamente dentro de lo que estas desarrollando, tienen su gracia, por lo menos cuando consigues superarlos. Los que te encuentras, sólo porque estás usando un ordenador, o ciertas herramientas, al final sólo nos hacen perder tiempo precioso. Suelen ser exasperantes: no es que puedas resolverlos sólo con ingenio, necesitas buscar en Internet, cruzar los dedos y probar diferentes soluciones, muchas veces dudosas.

Voy a proponer una solución a el error de Git: "Error: Permission denied (publickey)". Por las búsquedas que hice, parece bastante común, y hay hilos enteros de gente furiosa esperando una solución (foros de soporte de Bitbucket). Exasperante como dije. Algo que haces habitualmente, un día no funciona y te ves probando soluciones varias. Al final, después de algunas pruebas lo conseguí solucionar de forma más o menos intuitiva y por mis propios medios.

Bueno, ¿y por qué a mi? Pues porque eres mala persona o lo fuiste en otra vida. Lo mío es toda una historia...


Situación inicial...

Mi portátil sufrió un problema con la refrigeración. Ya lo desmonte entero hace 7 meses con lágrimas en los ojos y cambie el ventilador. Por suerte cuando lo monte seguía vivo, me tiraré por la ventana el día que tenga que cambiar a Windows 8/10. Dicho esto, deberían tirar a los fabricantes: colocan en el último rincón un componente que debería ser accesible para una limpieza periódica, una buena forma de que cambies de equipo de vez en cuando. Y volviendo a la situación inicial... tuve que volver a desmontar el portátil. Saco el ventilador y lo llevo a la tienda. Lo probamos y funciona, malo. No funcionaba dentro del ordenador y tengo que volver con éste, echo cachos en una caja polvorones... con lágrimas en los ojos, por si no lo habías pensado.

Estos días, tuve que utilizar un portátil que me dio mi novia y nunca se usa.
Por aquellos días era nuevo pero lento como el caballo del malo y un día de aquellos que quería estamparlo contra la pared, me convertí en su nuevo propietario a cambio de algunas gominolas.

Así, en espera del diagnóstico del técnico, me puse con una librería nueva, creo mi repo local, creo mi repo remoto en Bitbucket y listo. Cuando voy a sincronizar y enviar los primeros commits, me encuentro el mensaje de "error". ¡Desconcierto! Juraría que ya utilice repositorios con este equipo alguna vez... Habían cambiado la interfaz de Bitbucket hacía un par de semanas y de primeras no supe que podía fallar.

Bueno, varias pruebas y error:

  • Eliminar repositorio remoto y volver a crearlo.
  • Añadir clave SSH que tengo en local al repositorio.
  • Crear nueva clase SSH local y añadirla al repositorio.
  • Buscar clave SSH en otro repositorio que actualizará con éxito en el otro equipo.

Este último paso me puso sobre la pista. No había clave SSH en éste repositorio y es uno con el que trabajo desde el otro equipo... en algún sitio estará. Encuentro que en la configuración de la propia cuenta de Bitbucket, hay donde añadir claves SSH públicas "globalmente". Añadí la que me había creado en local. Me da un error porque la tengo añadida al repo de la librería. La elimino, vuelvo a añadirla en el listado de la cuenta y ÉXITO!!!

Cuestiones finales

¿Porque se pueden añadir claves SSH en un repositorio y en la cuenta?

¿Porque no puede haber una misma clave en ambos sitios?

Si no pudiste responder a estas preguntas en un primer momento, puedes inferir la razón por la que no has podido resolver éste problema con Git rápidamente y por tus propios medios. Resulta que la clave en tu cuenta te da pleno acceso a tus repositorios y la que se pone en un repositorio, permite un acceso limitado, de sólo lectura a ese repositorio concreto, y sólo funciona según tu plan contratado, con uno gratuito no funcionan en absoluto, como si no estuvieran. Sólo tienes la opción para marearte por así decirlo.

Más sobre las claves de acceso de repositorio en Bitbucket aquí.


02-07-2017