Mensaje de error de GitHub: permiso denegado (clave pública)


701

¿Alguien ha visto este error y sabe qué hacer?

Estoy usando la terminal, estoy en la raíz, existe el repositorio de GitHub y no sé qué hacer ahora.

> git push -u 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.



1
Podría haber problemas de permisos con .ssh y claves autorizadas. Ssh es bastante estricto, googlealo.
Karl Morrison


como la respuesta de @bdukes aquí es el comando usando https y funcionará, ejemplo de Windows: "PS C: \ xampp \ htdocs> git clone github.com/algolia/instant-search-demo.git "
Dung

Respuestas:


663

GitHub no puede autenticarte. Entonces, o no está configurado con una clave SSH, porque no ha configurado una en su máquina , o su clave no está asociada con su cuenta de GitHub.

También puede usar la URL HTTPS en lugar de la URL SSH / git para evitar tener que lidiar con las claves SSH. Este es el método recomendado de GitHub .

Además, GitHub tiene una página de ayuda específicamente para ese mensaje de error , y explica con más detalle todo lo que puede verificar.


53
Este error no es exclusivo de GitHub. Recibo el mismo error con BitBucket, y me estoy rascando la cabeza sobre cómo resolverlo ...
IgorGanapolsky

32
La parte de ayuda se usa ssh -vT git@github.comdesde la página de ayuda de Github para ayudar a depurar qué clave está usando su repositorio. Le sugiero que lo agregue en su respuesta.
MaximeBernard

25
El voto positivo de usar HTTPS en lugar de SSL es un poco decepcionante. SSH es mucho más conveniente. La sugerencia de @MaximeBernard anterior resolvió el problema para mí: GIT no estaba buscando el lugar correcto para el directorio .ssh. El uso ssh -vT git@github.comproporciona mucha información sobre por qué no funciona.
Christophe

1
Según mi comentario anterior, una tercera opción es que el comando se envíe desde una cuenta que no sea la que tiene las teclas ssh (por ejemplo, se ejecuta como root).
David LeBauer

1
Como @theapache64 mencionó: si estás en una Mac y ya has generado una clave ssh, "ssh-add" puede ser lo que te falta. Trabajó para mi.
Impermanencia digital

78

¿ Creó un archivo de configuración en su directorio ~ / .ssh? Debe tener contenidos como estos:

Host github.com 
 IdentityFile ~/.ssh/github_rsa

Suponiendo que creó una clave ssh llamada github_rsa

y lo subí a GitHub ...

NOTA: Debe seguir esta forma de configuración explícita si tiene más de 1 clave (2 y más) en su directorio ~ / .ssh /. Si no especifica la clave de esta manera, se toma la primera clave en orden y se usa para la autenticación de github, por lo que depende del nombre del archivo de la clave.


1
Había generado la clave ssh y pude trabajar bien, durante bastante tiempo, sin problemas. Un buen día (probablemente después de reiniciar), dejó de funcionar, mientras que la clave estaba intacta en github y en mi sistema local. Agregué el "archivo de configuración", especificando el key-mapped-to-domain. Detalles proporcionados anteriormente en igor-ganapolsky-answer. Funciona bien !
paradisíaca

3
¡Esto realmente resuelve mi problema! ¡Muchas gracias! Pero tengo una pregunta. Antes de usar su método, ssh -T git@github.comresponda correctamente, mientras que git push -u origin masterda el mismo error que en la pregunta. ¿Por qué puedo conectarme a él correctamente pero no puedo presionarlo o buscarlo?
Eden Harder el

@EdenHarder Estoy enfrentando el mismo problema. ¿Encontraste una respuesta?
Vreddhi Bhat

64

Sé sobre este problema. Después de agregar la clave ssh, agregue su clave ssh al agente ssh también (de los documentos oficiales )

ssh-agent -s
ssh-add ~/.ssh/id_rsa

Después de que todo funcione bien, git puede ver la clave adecuada, antes no podía.


55
¡Prefecto! Trabajé en mi MacOS X.
stillatmylinux

99
No se pudo abrir una conexión con su agente de autenticación.
Mona Jalal

intenta ejecutar esto: evalssh-agent -s
Vincent acent

Uso @MonaJalalssh-add ~/.ssh/github_rsa
Anirban Nag 'tintinmj'

Perfecto. está funcionando. Gracias. 👌
Erkam KUCET

62

Debe generar una clave SSH (si no tiene una) y asociar la clave pública con su cuenta de Github. Consulte la documentación de Github .


2
Gracias por esto ... Obtuve una clave SSH ahora generada desde GitHub. ¿Qué comando se usa para asociar los dos en la terminal ahora? ¡Gracias!
webwrks

2
No hay un comando de terminal para eso. Vea el paso 4 en la documentación que vinculé en mi respuesta.
cdhowie

Cloné el repositorio usando HTTPS. ¿Necesito generar una clave SSH en este caso?
Pabitra Dash

@PabitraDash No. HTTPS no utiliza claves SSH.
cdhowie

51

Esto me paso a mi. Por alguna razón, mi origen se estropeó sin que me diera cuenta:

Compruebe si su configuración sigue siendo correcta

git remote -v

la url debe ser algo así como ssh: //git@github.com/YourDirectory/YourProject.git; si no ve git@github.com, use

git remote set-url origin git://github.com/YourDirectory/YourProject.git

para arreglarlo O puede usar la aplicación github para verificar y establecer la URL del repositorio remoto primario en el panel de configuración de su repositorio particular.


99
Ten cuidado con las URL. Difieren entre https y ssh y las publicaciones en esta página no lo dejan tan claro. Cada proyecto git tiene un archivo .git / config en el directorio raíz del proyecto. Allí puede configurar la información remota y de la sucursal. Configurar el control remoto para https: url = github.com/<yourGitUserName>/<yourGitProject>.git While para git + ssh: url = git@github.com: <yourGitUserName> / <yourGitProject> .git Tener la URL incorrecta hace que Error de permiso de clave pública denegado, que probablemente no sea un error muy claro.
darKoram

para mi caso en la final solo funciona con en la parte: git origen remoto set-url github.com/your_directory/your_project.git
RLD

19

Suponiendo que está conectando GitHub a través de SSH, puede ejecutar el siguiente comando para confirmar esto.

$git config --get remote.origin.url

Si obtiene un resultado tiene el siguiente formato git@github.com: xxx / xxx.github.com.git, entonces debe hacer lo siguiente.

Genere una clave SSH (o use una existente). si tenía uno, solo necesita agregar su clave al agente ssh (paso 2) y a su cuenta de GitHub (paso 3).

a continuación son para aquellos que no tienen clave SSH.

Paso 1 Generar pares de claves rsa públicas / privadas.

$ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Se le pedirá que confirme dónde guardar la clave SSH y qué frase de contraseña desea usar.

Paso 2 Agregue su clave al agente ssh

  • Asegúrese de que ssh-agent esté habilitado

    $eval "$(ssh-agent -s)"

  • Agregue su clave SSH al agente ssh:

    $ssh-add ~/.ssh/id_rsa

Paso 3 Agregue su clave SSH a su cuenta

$sudo apt-get install xclip

$xclip -sel clip < ~/.ssh/id_rsa.pub

Luego agregue la clave copiada a GitHub

Vaya a Configuración -> Teclas SSH (barra lateral de configuración personal) -> Agregar clave SSH -> complete el formulario (la clave está en su portapapeles, solo use ctrl + v) -> Agregar clave

Después de seguir los pasos anteriores, debe resolver el problema del permiso.

Enlace de referencia: Generación de claves SSH .


Esta solución funcionó en ubuntu, $ ssh-add /root/.ssh/id_rsa
Feras

Esto resolvió un extraño error en mi entorno también, una modificación que sugeriría es evitar la dependencia de xclip, solo usecat ~/.ssh/id_rsa.pub
Pogrindis

19

Primero, necesitamos verificar las claves ssh existentes en su computadora. Abre la Terminal y ejecuta:

ls -al ~/.ssh

#or

cd ~/.ssh
ls

y eso listará los archivos en su directorio .ssh

Y finalmente, dependiendo de lo que veas (en mi caso fue):

 github_rsa  github_rsa.pub known_hosts

Solo intenta configurar tu RSA y con suerte eso resolverá tus problemas de "git push origin"

$ ssh-keygen -lf ~/.ssh/github_rsa.pub

NOTA: los certificados RSA están emparejados con claves, por lo que tendrá un certificado privado y uno público, privado no será accesible para usted ya que pertenece a github (en este caso), pero el público es el que puede faltar cuando ocurre este error (al menos ese fue mi caso, mi cuenta de github o repo se estropeó de alguna manera y tuve que "vincular" la clave pública, previamente generada)


¿Tengo que copiar la SHAsalida a github desde este comando?
IgorGanapolsky

No, solo ejecute "ssh-keygen -lf ~ / .ssh / <YOUR_GITHUB_RSA_FILE.pub>"
d1jhoni1b el

es por eso que también adjunté un comando que "Lista los archivos en su directorio .ssh" ... para que así sepa de qué archivo extraer su clave (ssh-keygen). Recuerde que los certificados RSA están emparejados con claves, por lo que tendrá un certificado privado y uno público, privado no será accesible para usted, ya que pertenece a github (en este caso) pero el público es el que podría perderse cuando ocurra este error ( al menos ese fue mi caso, mi cuenta de github o repo se estropeó de alguna manera y tuve que "vincular" la clave pública, previamente generada, nuevamente)
d1jhoni1b

$ ssh-keygen -lf ~ / .ssh / github_rsa.pub /home/mona/.ssh/github_rsa.pub: No existe tal archivo o directorio
Mona Jalal

"No existe tal archivo o directorio" significa que no tiene ese nombre de archivo o ruta ... ¿qué obtiene cuando ejecuta ls -al ~ / .ssh?
d1jhoni1b


11

Otra solución :

cree las claves SSH, escriba ssh-keygen -t rsa -C "your_email@example.com". Esto creará los archivos id_rsa e id_rsa.pub.

Agregue id_rsa a la lista ssh en la computadora local: ssh-add ~/.ssh/id_rsa.

Después de generar las claves, obtenga la clave pública utilizando:

cat ~/.ssh/id_rsa.pub 

obtendrás algo como:

cat ~/.ssh/id_rsa.pub 

ssh-rsa AAAB3NzaC1yc2EAAAADAQABAAACAQCvMzmFEUPvaA1AFEBH6zGIF3N6pVE2SJv9V1MHgEwk4C7xovdk7Lr4LDoqEcqxgeJftwWQWWVrWWf7q9qCdHTAanH2Q5vx5nZjLB+B7saksehVOPWDR/MOSpVcr5bwIjf8dc8u5S8h24uBlguGkX+4lFJ+zwhiuwJlhykMvs5py1gD2hy+hvOs1Y17JPWhVVesGV3tlmtbfVolEiv9KShgkk3Hq56fyl+QmPzX1jya4TIC3k55FTzwRWBd+IpblbrGlrIBS6hvpHQpgUs47nSHLEHTn0Xmn6Q== user@email.com

copie esta clave (valor) y vaya a github.com y en la configuración (clave ssh y pgp) agregue su clave pública.


10

En caso de que no esté accediendo a su propio repositorio, o clonando dentro de un repositorio clonado (usando algunos comandos "git submodule ..."):

En el directorio de inicio de su repositorio:

$ ls -a

1. Abra ".gitmodules" y encontrará algo como esto:

[submodule "XXX"]
    path = XXX
    url = git@github.com:YYY/XXX.git

Cambie la última línea para que sea el HTTPS del repositorio que necesita extraer:

[submodule "XXX"]
    path = XXX
    https://github.com/YYY/XXX.git

Guarde ".gitmodules" y ejecute el comando para submódulos, y ".git" se actualizará.

2. Abra ".git", vaya al archivo "config" y encontrará algo como esto:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/YYY/XXX.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[submodule "XXX"]
    url = git@github.com:YYY/XXX.git

Cambie la última línea para que sea el HTTPS del repositorio que necesita extraer:

    url = https://github.com/YYY/XXX.git

Entonces, en este caso, el problema principal es simplemente con la url. El HTTPS de cualquier repositorio se puede encontrar ahora en la parte superior de la página del repositorio.


9

esto funcionó para mí:

1- eliminar todos los orígenes

git remote rm origin  

(cf. https://www.kernel.org/pub/software/scm/git/docs/git-remote.html )

* remoto: "Administre el conjunto de repositorios (" controles remotos ") cuyas ramas rastrea.

* rm: "Eliminar el nombre remoto. Se eliminan todas las ramas de seguimiento remoto y los ajustes de configuración para el control remoto".

2- comprobar que todo ha sido eliminado:

git remote -v  

3- agregar nuevo maestro de origen

git remote add origin git@github.com:YOUR-GIT/YOUR-REPO.git

¡eso es todo amigos!


1
Eso fue útil. Mediante estos comandos, comienza a pedirme el nombre de usuario y la contraseña de la cuenta de github, después de eso puedo presionar fácilmente al enlace de github por tipo en la terminal: git push -u origin master
Noha Salah

8

Asegúrese de que ssh-add -lmuestra una huella digital de una clave SSH que está presente en la lista de claves SSH en su cuenta de Github.

Si la salida está vacía, pero sabe que tiene una clave SSH privada que funciona con su cuenta de github, ejecute ssh-addesta clave (que se encuentra en ~/.ssh. Se llama id_rsade manera predeterminada, por lo que probablemente la ejecutará ssh-add id_rsa).

De lo contrario, siga estas instrucciones para generar un par de claves SSH.


8

Estaba usando github anteriormente para uno de mi proyecto php. Mientras usaba github, estaba usando ssh en lugar de https. Tenía mi máquina configurada así y cada vez que solía comprometer y empujar el código, me pedía mi contraseña de clave rsa.

Después de algunos días, dejé de trabajar en el proyecto php y olvidé mi contraseña rsa. Recientemente, comencé a trabajar en un proyecto de Java y me mudé a Bitbucket. Como olvidé la contraseña y no hay forma de recuperarla, supongo que decidí usar el protocolo https (recomendado) para el nuevo proyecto y obtuve el mismo error en la pregunta.

¿Cómo lo resolví?

  1. Ejecuté este comando para decirle a mi git que use https en lugar de ssh:

    git config --global url."https://".insteadOf git://
    
  2. Retire cualquier control remoto si alguno

    git remote rm origin
    
  3. ¡Rehaga todo, desde git init hasta git push, y funciona!

PD: también desinstalé ssh de mi máquina durante el proceso de depuración pensando que, eliminarlo solucionará el problema. ¡¡Sí, lo sé!! :)


No creo que sea una buena idea dirigir a las personas hacia https, cuando también se supone que ssh funciona. Además, es poco probable que esto funcione para las personas detrás de un proxy corporativo.
Igor Stoppa

8

Problema resuelto si cambia el acceso ssh al acceso https al repositorio remoto:

git remote set-url origin https_link_to_repository

git push -u origin master

5

Creo que tengo la mejor respuesta para usted, sus aplicaciones git leen su id_rsa.pub en el directorio de usuario raíz

/home/root/.ssh/id_rsa.pub

Es por eso que git no puede leer su clave en /home/your_username/.ssh/id_rsa.pub. Por lo tanto, debe crear la clave en /home/root/.ssh/

$ sudo su
$ ssh-keygen
$ cd ~/.ssh
$ cat id_rsa.pub

Luego copie la clave en su cuenta de github. Me ha funcionado. Puedes probarlo.


Esto me permitió la respuesta que estaba buscando. Corrí clon con sudo por costumbre, por lo que estaba buscando las credenciales incorrectas. Me quité el sudo y mi clon funcionó bien.
Taekahn

4

Si ya ha creado una clave SSH y todavía recibe el error, es porque debe otorgarle al usuario permisos para leer y escribir en la carpeta en la que está clonando. Para hacer esto sudo chmod 777 <your_folder_name_here>",. Por supuesto, esto es después de haber generado una clave SSH y aún está recibiendo este error. Espero que esto ayude a los futuros usuarios.

Editar

Para agregar a esto, use el administrador en Windows si está usando el git bash


Esta. Esto también puede causar el problema.
KevinO

1
Este fue mi problema, pero no recomendaría establecer permisos 777 en una carpeta. En mi caso, la carpeta era propiedad del usuario root y necesitaba darle acceso a mi cuenta de usuario no root. Hice esto así:sudo chown -R $USER:$USER <your_folder_name_here>
David

@David, también lo recomiendo. 777 es bastante hacky y no es seguro.
Kevin

3

Tuve el mismo problema recientemente. Esto podría ayudar si necesita una solución inmediata, pero esto debe hacerse cada vez que reinicie su sistema

Desde la terminal, ejecute: ssh-add ~/.ssh/id_rsa

Ingrese la contraseña de su sistema y eso debería funcionar.


3

Me gustaría agregar algunos de mis hallazgos:

Si está utilizando GitBash, asegúrese de que la clave SSH esté almacenada ~/.ssh/id_rsa.

Por defecto GitBashbusca ~/.ssh/id_rsacomo ruta predeterminada la clave SSH.

Incluso el nombre del archivo id_rsaimporta. Si guarda su clave SSH en otro nombre de archivo o ruta, arrojará el Permission Denied(publickey)error.


3

OK, hay pocas soluciones para esta, algunas de ellas ya podrían haber sido mencionadas, pero solo para mantenerlas juntas:

  • asegúrese de que sus claves estén presentes, por defecto otra carpeta ~ / .ssh /, es decir, id.rsa e id.rsa.pub

  • asegúrese de que las claves tengan los permisos correctos, puede ejecutar chmod:

    chmod 600 ~ / .ssh / id_rsa

    chmod 644 ~ / .ssh / id_rsa.pub

  • asegúrese de que el contenido de su clave pública (id_rsa.pub) coincida con el que se cargó en la configuración del repositorio remoto

  • Finalmente arregle los problemas con el agente ssh : ssh-add

Más información: https://itcodehub.blogspot.com/2015/01/ssh-add-problems-with-ssh-agent-and.html


Copié mi clave ssh de una computadora a otra usando una unidad USB formateada como FAT32. Eso cambió los permisos de los archivos. En Ubuntu, estoy acostumbrado a que se me solicite automáticamente la contraseña SSH cuando sea necesario, pero eso no sucedió en silencio hasta que ejecuté chmodcomo usted describe. Gracias.
Lydell

1

Si está utilizando la interfaz de usuario de GitHub para Mac, verifique las preferencias para asegurarse de haber iniciado sesión.


1

Recibí el mismo error durante 'git push'. En el lado del cliente tuve dos origen y maestro. Quité uno, luego funcionó bien.


1

puedes usar la URL de Https para iniciar sesión

Supongo que está intentando iniciar sesión con ssh url cuando dice git push si solo pide una contraseña, considere que se está conectando a través de ssh.better usa http url.


1

También en ubuntu, a pesar de que ya se ingresó la clave SSH en la configuración de BitBucket, obtuve este problema. La razón era que estaba intentando lo siguiente:

sudo git push origin master

No estoy seguro de por qué, pero se resolvió usando

git push origin master

No se usa sudo.


1

Para mí probé esto ...

eval "$(ssh-agent -s)"

entonces corro

ssh-add ~/.ssh/path-to-the-keyfile

y para generar la clave puedes ejecutar

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

esto generará el par de claves (públicas y privadas).

puede almacenar esta clave en github para obtener más información. Lea esto Agregar una nueva clave SSH a su cuenta de GitHub

Espero que ayude a otros :)


1

Estaba teniendo un problema similar a @Batman. Sin embargo, debido a que estaba ejecutando esto en / usr / local / src / projectname, ejecutar sin sudo no era una opción.

Simplemente agregue el indicador -E para preseleccionar el entorno (su ~ / .ssh / ruta).

$ sudo -E git clone git@your_repo

Del hombre sudo:

-E, --preserve-env Indica a la política de seguridad que el usuario desea conservar sus variables de entorno existentes. La política de seguridad puede devolver un error si el usuario no tiene permiso para preservar el medio ambiente.


1

Una vez que esto suceda es cuando sigas las instrucciones de GitHub después de crear tu repositorio. Git le indicará que agregue su control remoto con algo como esto.

git remote add origin git@github.com:<user>/<project>.git

Reemplace lo que está en <> con valores relacionados con su cuenta.

La solución es eliminar el .gitsufijo. Agregue el control remoto de la siguiente manera:

git remote add origin git@github.com:<user>/<project>


1

tl; dr

en el ~/.ssh/configpuesto

PubkeyAcceptedKeyTypes=+ssh-dss

Escenario Si está utilizando una versión de openSSH> 7, como decir en una MacBook Pro con barra táctil, esssh -V
OpenSSH_7.4p1, LibreSSL 2.5.0

También tenía una Mac más antigua que originalmente tenía su clave que colocó en Github, es posible que esté utilizando una clave id_dsa. OpenSSH v7 no incluye de manera predeterminada el uso de estas claves DSA (que incluyen esto ssh-dss), pero aún puede agregarlo nuevamente al poner el siguiente código en su~/.ssh/config

PubkeyAcceptedKeyTypes=+ssh-dss

La fuente que funcionó para mí es este boletín de Gentoo

Ahora al menos puede usar GitHub y luego arreglar sus claves para RSA.


1

Encontré esta página mientras buscaba una solución a un mensaje de error similar usando git pullun host remoto:

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

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

Me conecté desde mi máquina local al host remoto a través de ssh -AY remote_hostname. Esta no es una solución a la pregunta de OP, pero es útil para otros que se encuentran con esta página, así que publíquela aquí.

Tenga en cuenta que, en mi caso, git pullfunciona bien en mi máquina local (es decir, la clave ssh se configuró y se agregó a la cuenta de GitHub, etc.). Resolví mi problema agregando esto a ~/.ssh/configmi computadora portátil:

Host *
     ForwardAgent yes

Luego me volví a conectar al host remoto con ssh -AY remote_hostname, y git pullahora funcionó. El cambio en la configuración permite reenviar mi par de claves ssh desde mi máquina local a cualquier host. La -Aopción de sshreenviarlo realmente en esa sesión ssh. Ver más detalles aquí.


0

Tal vez su agente ssh no esté habilitado. Puede probarlo

  1. Descargar git

http://git-scm.com/

  1. Instalarlo

  2. Habilitar ssh-agent

C: \ Archivos de programa \ Git \ cmd

start-ssh-agent


0

Vaya al panel de su cuenta de GitHub, busque el repositorio de su proyecto, haga clic en la pestaña Configuración : en Implementar claves , deberá agregar su clave SSH. Abra la Terminal y escriba:

cat ~/.ssh/id_rsa.pub | pbcopy 

Esto copiará la clave de su archivo id_rsa.pub. Entonces, regrese al panel de control de GitHub, péguelo, haga clic en Agregar clave y listo .

La misma solución se aplica a las cuentas de Bitbucket.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.