¿Cómo resolver el error Permiso denegado (clave pública) al usar Git?

632

Estoy en Mac Snow Leopard y acabo de instalar git.

Acabo de intentar

git clone [email protected]:cakebook.git

pero eso me da este error:

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

¿Qué me estoy perdiendo?
También he intentado hacerlo ssh-keygensin passphase pero sigue siendo el mismo error.

Teepusink
fuente
8
¿Has intentado cargar la clave pública que has generado a través de ssh-keygen?
Patrick Cornelissen
Mi problema fue que intenté clonar sudo: este es otro usuario con otra clave pública.
Vitaly Zdanevich
mismo error. Previamente creé una clave pública a través de github, luego generé otro par de claves con la ssh-keygenutilidad. La eliminación de la antigua clave pública en la configuración personal en github y la adición de mi clave ssh generada id_rsa.pub a las claves SSH y GPG solucionó los problemas de permisos de clonación.
Tanner Dolby

Respuestas:

774

Si el usuario no ha generado un conjunto de claves ssh pública / privada establecido anteriormente

Esta información está funcionando en theChaw pero se puede aplicar a todos los demás repositorios de git que admiten autenticaciones SSH pubkey. (Ver gitolita , gitlab o github por ejemplo).

Primero comience configurando su propio conjunto de pares de claves públicas / privadas. Esto puede usar DSA o RSA, por lo que básicamente cualquier tecla que configure funcionará. En la mayoría de los sistemas puede usar ssh-keygen.

  • Primero querrás cd en tu directorio .ssh. Abre la terminal y ejecuta:

    cd ~/.ssh && ssh-keygen

  • A continuación, debe copiar esto en su portapapeles.
    • En OS X ejecute: cat id_rsa.pub | pbcopy
    • En la ejecución de Linux: cat id_rsa.pub | xclip
    • En Windows (a través de Cygwin / Git Bash) ejecute: cat id_rsa.pub | clip
  • Agregue su clave a su cuenta a través del sitio web.
  • Finalmente configure su .gitconfig.
    • git config --global user.name "bob"
    • git config --global user.email bob@... (no olvide reiniciar su línea de comando para asegurarse de que la configuración se vuelva a cargar)

Eso es todo, deberías ser bueno para clonar y pagar.

Puede encontrar más información en https://help.github.com/articles/generating-ssh-keys (gracias a @Lee Whitney) -

Si el usuario ha generado un conjunto de claves públicas / privadas ssh establecido antes

  • verifique qué clave se ha autorizado en la configuración de su cuenta de github o gitlab
  • determinar qué clave privada correspondiente debe asociarse desde su computadora local

eval $(ssh-agent -s)

  • definir dónde están ubicadas las llaves

ssh-add ~/.ssh/id_rsa

Rufinus
fuente
66
Okay. Esto en realidad no es un problema, sino un problema de sincronización ssh. Obtuve lo mismo con Assembla y su enlace me ayudó a resolverlo. Gracias !
Alexandre Bourlier
Esta respuesta es útil, pero parece más completa e igual de fácil si está generando claves desde cero: help.github.com/articles/generating-ssh-keys
whitneyland
66
Experimenté un problema con el keygen. Es sensible a la dirección de correo electrónico en una variable global env. En caso de que tenga este problema, deberá especificar la dirección de correo electrónico para su cuenta de github en el primer paso: ssh-keygen -t rsa -C "[email protected]"
melchoir55
30
Si eso todavía no funciona, deberás hacerlo ssh-add ~/.ssh/id_rsa.
Michael Litvin
1
Copiar usando xclipLinux solo funcionó haciendo lo siguiente xclip -sel clip < ~/.ssh/id_rsa.pubque se enumera aquí: help.github.com/articles/generating-ssh-keys
Pat Migliaccio
217

Se puede hacer una solución de problemas más extensa e incluso una reparación automática con:

ssh -vT [email protected]

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

stevek
fuente
1
Mi problema tenía que ver con tener una clave diferente para mi servidor. Una vez que usé el comando anterior para determinar el problema, arreglé el IdentifyFile en mi archivo de configuración y funcionó.
Jarie Bolander
1
Mostraba qué clave github intentaba usar para autenticarse. v útil
cdosborn
99
Esto no arregla nada. Todavía recibo el error en la pregunta de OP.
IgorGanapolsky
55
El comando está ahí para ayudarlo a solucionar el problema, no es un interruptor mágico de arreglar esto para mí.
stevek
2
No puedo decir que esto haya resuelto nada, pero es un comando muy interesante y también funciona con GitHub Enterprise.
Hack-R
164

Este error puede ocurrir cuando accede a la URL SSH (lectura / escritura) en lugar de la URL de solo lectura de Git, pero no tiene acceso de escritura a ese repositorio.

A veces solo desea clonar su propio repositorio, por ejemplo, implementarlo en un servidor. En este caso, solo necesita acceso de SOLO LECTURA. Pero dado que es su propio repositorio, GitHub puede mostrar URL SSH si así lo prefiere. En esta situación, si la clave pública de su host remoto no está en sus claves SSH de GitHub, su acceso será denegado, lo que se espera que suceda .

Un caso equivalente es cuando intenta clonar el repositorio de otra persona al que no tiene acceso de escritura con URL SSH.

En una palabra, si su intención es clonar solo un repositorio, use la URL HTTPS ( https://github.com/{user_name}/{project_name}.git) en lugar de la URL SSH ( [email protected]:{user_name}/{project_name}.git), lo que evita la validación (innecesaria) de la clave pública.


Actualización: GitHub está mostrando HTTPS como el protocolo predeterminado ahora y este movimiento probablemente puede reducir el posible mal uso de las URL SSH.

kavinyao
fuente
Con la https://github.comURL de Git, todavía dice SSL certificate problem: self signed certificate in certificate chain. git -c http.sslVerify=false clone ...Parece un movimiento peligroso. Sin embargo, Chrome no da ninguna advertencia de SSL. Pensamientos?
Jason Kleban
1
@ uosɐſ Lo siento pero nunca encontré este problema. Quizás lo primero que debe hacer es probar el mismo comando desde una máquina diferente y ver si el problema persiste.
kavinyao
1
Esto también lo hizo por mí. Gracias. Para clonar mi repositorio git en mi cuenta de alojamiento compartido (1 y 1) tuve que usar git clone https://github.com/MyUserName/MyRepo.git Simplemente haga clic en los enlaces de texto debajo de la URL del repositorio a la derecha de la página de Github donde dice " Puede clonar con HTTPS, SSH o Subversion . ". (Haga clic en HTTPS para obtener el enlace en lugar del SSH predeterminado ).
Oliver Schafeld
¡¡¡¡¡¡GRACIAS!!!!!!
Sharl Sherif
Excelente respuesta Finalmente, alguien explica por qué funciona así.
Qback
104

El enlace de ayuda de github me ayudó a resolver este problema. Parece que la clave ssh no se agregó al agente ssh. Esto es lo que terminé haciendo.

Comando 1:

Asegúrese de que ssh-agent esté habilitado. El comando inicia el agente ssh en segundo plano:

eval "$(ssh-agent -s)"

Comando 2:

Agregue su clave SSH al agente ssh:

ssh-add ~/.ssh/id_rsa
jarora
fuente
77
Después de actualizar a OSx El Capitan a Sierra, esto funcionó para mí.
Louwki
77
Trabaja para mí después de actualizar a macOS Sierra =)
Adriano Resende
Esto funcionó para mí en Raspberry Pi, donde ssh-add tiene una bandera "-k" en lugar de "-K", aparentemente. Pero una vez que agregué mi clave de implementación, pude clonar con éxito mi repositorio usando su enlace SSH.
Josh
34

Obtuve el mismo informe de error.

Solucionado con el uso de HTTP en su lugar. Como no quiero establecer "claves SSH" para una PC de prueba.

Cambiar URL a HTTP cuando clone:

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

Mi problema es un poco diferente : tengo la URL configurada al agregar un repositorio local existente a remoto, usando:

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

Para solucionarlo, restablezca la URL a HTTP:

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

Por cierto, puede verificar su URL usando el comando:

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

Espero que esto ayude a alguien como yo. :RE

Robina Li
fuente
22

Esto funciona para mi:

ssh-add ~/.ssh/id_rsa
Wouter Schoofs
fuente
21

Tenga en cuenta que (al menos para algunos proyectos) debe tener una cuenta de github con una clave ssh .

Mire las claves enumeradas en su agente de autenticación ( ssh-add -l )
(si no ve ninguna, agregue una de sus claves existentes con ssh-add / path / to / your / key (por ejemplo: ssh-add ~ /.ssh/id_rsa ))
(si no tiene ninguna clave, primero cree una. Consulte: http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html o simplemente google ssh-keygen)

Para verificar que tiene una clave asociada con su cuenta de github :

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

Debería ver al menos una clave con una clave hash que coincida con uno de los hashes que vio cuando escribió ssh-add -l hace solo un minuto.

Si no lo hace, agregue uno e intente nuevamente.

Mason Bryant
fuente
Esto funcionó para mí. Me sucedió porque mi clave no se agregó al agente de autenticación. Gracias.
antonD
19

Estaba luchando con el mismo problema, eso es lo que hice y pude clonar el repositorio. Seguí estos procedimientos para iMac .

Primer paso: verificar si ya tenemos la clave SSH pública.

  1. Terminal abierta
  2. Ingrese ls -al ~/.sshpara ver si las claves SSH existentes están presentes:

Verifique el listado del directorio para ver si ya tiene una clave SSH pública. Public default es uno de los siguientes d_dsa.pub, id_ecdsa.pub, id_ed25519.pub, id_rsa.pub

Si no encuentra, vaya al paso 2; de lo contrario, siga el paso 3

Paso 2: generar clave pública SSH

  1. Terminal abierta
  2. Ingrese el comando followong con su dirección de correo electrónico válida que use para github ssh-keygen -t rsa -b 4096 -C "[email protected]"
  3. Verá lo siguiente en la terminal Generating public/private rsa key pair. Cuando se le solicite que "Enter a file in which to save the key,"presione Entrar. Esto acepta la ubicación predeterminada del archivo. Cuando se le solicite Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]Simplemente presione enter nuevamente. En el indicador, escriba una frase de contraseña segura.
  4. Enter passphrase (empty for no passphrase): [Type a passphrase]presione enter si no desea Enter same passphrase again: [Type passphrase again]presionar enter nuevamente

Esto generará id_rsa.pub

Paso 3: Agregue su clave SSH al agente ssh

  1. Tipo interminal eval "$(ssh-agent -s)"
  2. Agregue su clave SSH al agente ssh. Si está utilizando una clave SSH existente en lugar de generar una nueva clave SSH, deberá reemplazar id_rsa en el comando con el nombre de su archivo de clave privada existente. Ingrese este comando$ ssh-add -K ~/.ssh/id_rsa

Ahora copie la clave SSH y también agréguela a su cuenta de github

  1. En la terminal, ingrese este comando con su nombre de archivo ssh. pbcopy < ~/.ssh/id_rsa.pubEsto copiará el archivo a su portapapeles. Ahora abra su cuenta github. Vaya a Configuración> SSH y GPG> Nueva clave SSH. Ingrese el título y pegue la clave del portapapeles y guárdela. Voila, ya terminaste.
Zeeshan Shabbir
fuente
2
Copia de usuario de Windows a través de: cat ~ / .ssh / id_rsa.pub | clip
Fabii
1
Finalmente, después de leer aquí y allá durante una hora, la solución paso a paso ... funciona muy bien. Recuerde agregar su contraseña de github como la frase de contraseña en los pasos, de lo contrario tendrá que agregarla manualmente cada vez
Afshin Ghazi
13

Tuve una situación ligeramente diferente, estaba conectado a un servidor remoto y estaba usando git en el servidor, cuando ejecuté cualquier comando git recibí el mismo mensaje

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

La forma en que lo arreglé fue cambiando el archivo / etc / ssh_config en mi Mac. desde

ForwardAgent no 

a

ForwardAgent yes
Richipal
fuente
El error se produjo al intentar obtener gemas de github desde una VM VirtualBox. Actualicé mi Vagrantfile para usar config.ssh.forward_agent = true, reinicié la VM y ahora funciona.
Chris Bloom
1
De acuerdo con esto, podría no ser la mejor opción en términos de seguridad: heipei.github.io/2015/02/26/…
Papá
13

Encontré el mismo problema porque pensé que la diferencia entre SSH y HTTPS es

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

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

Así que cambié de HTTPS a SSH simplemente cambiando https://a ssh://nada al final de la url.

Pero la verdad es:

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

[email protected]:USERNAME/REPOSITORY.git

Lo que significa que cambié ssh://github.com/USERNAME/REPOSITORY.gita [email protected]:USERNAME/REPOSITORY.gitfunciona.

¡Estúpido error pero la esperanza ayuda a alguien!

William Hu
fuente
Sí, me cambié ssh://github.com/USERNAME/REPOSITORY.gita [email protected]:USERNAME/REPOSITORY.gitfunciona.
William Hu
Por supuesto. Solo digo que no veo el punto de mencionar https;)
OneCricketeer
Veo porque solo uso en sshlugar de, httpsasí que cambié 'https: //' a 'ssh: // `y luego recibí el error. Así que cambie 'ssh: // git /../ `a' git @ .. /":) Editó mi respuesta.
William Hu
Esto funciona para mi. ¡Muchas gracias! Intenté https y luego ssh, pero sigue negando mi acceso hasta que aparece "git clone [email protected]: /myusername/myproject.git".
Thach Van
6

En Windows, asegúrese de que todas sus aplicaciones estén de acuerdo con HOME. Msys sorprendentemente NO lo hará por usted. Tuve que establecer una variable de entorno porque ssh y git no parecían estar de acuerdo sobre dónde estaba mi directorio .ssh.

Jason
fuente
6

¿Estás en un entorno corporativo ? ¿Es posible que las variables de su sistema hayan cambiado recientemente? Según esta respuesta SO, las claves ssh viven en %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub. Entonces, si %HOMEDRIVE%ha cambiado recientemente, git no sabe dónde buscar su clave y, por lo tanto, todas las cosas de autenticación.

Intenta correr ssh -vT [email protected]. Tome nota de dónde identity filese encuentra el. Para mí, eso apuntaba no a mi \Users\MyLoginunidad normal, sino a una unidad de red, debido a un cambio en las variables de entorno empujadas a nivel de red.

¿La solución? Como mi nuevo %HOMEDRIVE%tiene los mismos permisos que mis archivos locales, simplemente moví mi carpeta .ssh allí y la llamé un día.

Andrés
fuente
este trabajo para mi ayer mi clave ssh funcionaba pero hoy alguna configuración de mi sistema ha cambiado. Solo agrego shh key nuevamente y está funcionando ahora.
Hitesh Agarwal
6

Chicos, así es como funcionó para mí:

  1. Abra la terminal y vaya al usuario [Ver imagen adjunta]
  2. Abra la carpeta .ssh y asegúrese de que no tenga ningún archivo como id_rsa o id_rsa.pub; de lo contrario, a veces no reescribirá correctamente los archivos
  3. git --version [Verifique la instalación y versión de git]
  4. git config --global user.email "su identificación de correo electrónico"
  5. git config --global user.name "tu nombre"
  6. git config --list [asegúrese de haber configurado su nombre y correo electrónico]
  7. cd ~ / .ssh
  8. ssh-keygen, solicita guardar el archivo, permitirlo
  9. cat ~ / .ssh / id_rsa.pub [Acceda a su clave pública y copie la clave en la configuración de gerrit]

Nota : No debe usar el comando sudo con Git. Si tiene una muy buena razón por la que debe usar sudo, asegúrese de que lo está usando con cada comando (probablemente sea mejor usar su para obtener un shell como root en ese punto). Si genera claves SSH sin sudo y luego intenta utilizar un comando como sudo git push, no utilizará las mismas claves que generó

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

vikram jeet singh
fuente
5

Las instrucciones básicas de GIT no hacían referencia a la clave SSH. Siguiendo algunos de los enlaces anteriores, encontré una página de ayuda de git que explica, paso a paso, exactamente cómo hacer esto para varios sistemas operativos (el enlace detectará su sistema operativo y redirigirá, en consecuencia):

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

Recorre todo lo necesario para GITHub y también brinda explicaciones detalladas como "por qué agregar una frase de contraseña al crear una clave RSA". Pensé que lo publicaría, en caso de que ayude a alguien más ...

gMale
fuente
5

Una de las formas mas fáciles

ir a la terminal

  git push <Git Remote path> --all
Vizllx
fuente
3

Si tiene más de una clave, es posible que deba hacer ssh-add private-keyfile

kashif
fuente
¡Muchas gracias! Este fue de hecho mi problema.
GoGreen
[root @ li566-238 hanjiyun] # ssh-add private-keyfile private-keyfile: No existe tal archivo o directorio
JY Han
3

Llegué a este error porque necesitaba otorgarle a mi directorio de trabajo actual 700 permisos:

chmod -R 700 /home/ec2-user/
duhaime
fuente
3

Tuve que copiar mis claves ssh a la carpeta raíz. Google Cloud Compute Engine con Ubuntu 18.04

sudo cp ~/.ssh/* /root/.ssh/
Kandarp
fuente
2

Acabo de experimentar este problema al configurar mi proyecto actual, y ninguna de las soluciones anteriores funciona. Así que traté de mirar lo que realmente está sucediendo en la lista de depuración usando el comando ssh -vT [email protected]. Noto que mi nombre de archivo de clave privada no está en la lista. así que renombrar el nombre de archivo de la clave privada a 'id_rsa' hace el trabajo. Espero que esto pueda ayudar.

Rhey M.
fuente
No es útil en los casos en que usa la tecla "id_rsa" para cualquier otra cosa ...
random_user_name
2

Es bastante sencillo. Escribe el siguiente comando

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Genere la clave SSH. Abra el archivo y copie el contenido. Vaya a la página de configuración de GitHub y haga clic en la clave SSH. Haga clic en Agregar nueva clave SSH y pegue el contenido aquí. Eso es todo :) No deberías ver el problema nuevamente.

karthik339
fuente
1

Recibía un error similar de Permiso denegado (clave pública) cuando intentaba ejecutar un archivo MAKE.

Como alternativa a los pasos SSH anteriores, puede instalar la aplicación nativa de GitHub para Mac.

Haga clic en Descargar GitHub para Mac desde: https://help.github.com/articles/set-up-git#platform-mac

Una vez que complete la configuración con su cuenta de git hub (también instalé las herramientas de línea de comando de git hub pero no estoy seguro si este paso es obligatorio o no), recibí un correo electrónico:

[GitHub] Se agregó una nueva clave pública a su cuenta

y mi error fue corregido.

WickedW
fuente
1

Estaba recibiendo el mismo error. Mi problema era mezclar en sudo.

No pude crear el directorio en el que estaba clonando automáticamente sin prefijar el comando git clone con sudo. Sin embargo, cuando hice eso, mis claves ssh no estaban correctamente referenciadas.

Para solucionarlo, establecí permisos a través de chmod en el directorio principal que quería contener mi clon para poder escribir en él. Luego ejecuté git clone SIN un prefijo sudo. ¡Entonces funcionó! Cambié los permisos nuevamente después de eso. Hecho.

BuvinJ
fuente
1

Recibí este error porque generé las claves ssh con el correo electrónico incorrecto. Pude conectarme usando ssh, pero no usando git. La solución fue regenerar las claves utilizando la dirección de correo electrónico principal de mi cuenta de github.

Charles Brunet
fuente
1

Funcionó para mi.

Su clave pública se guarda en el archivo id_rsa.pub; y es la clave que carga en su cuenta. Puede guardar esta clave en el portapapeles ejecutando esto:

pbcopy <~ / .ssh / id_rsa.pub

  • copie la clave SSH en el portapapeles, regrese al portal web.
  • En el campo Clave SSH, pegue su clave SSH.
  • En el campo Nombre, proporcione un nombre para la clave.
  • salvar .
Harshikesh Kumar
fuente
1

Funciono para mi

ssh -i [your id_rsa path] -T [email protected]
Mr 陈哲
fuente
Prefieres explicar por qué tu respuesta resolvería su problema, gracias.
Muhammed Refaat
1

La solución más fácil para esto, cuando está intentando ingresar a un repositorio con un nombre de usuario diferente es:

 git remote set-url origin https://[email protected]/USERNAME/PROJECTNAME.git
Nizar B.
fuente
1

Este extraño error, en mi caso, fue un síntoma de gnome-keyring-daemonnombrar incorrectamente la clave para la que requería una contraseña.

Sigo los pasos descritos aquí e ingresé la contraseña a través del terminal. El error, también conocido como la interfaz de GUI confuso, se resolvió. Ver: /ubuntu/3045/how-to-disable-gnome-keyring

rivanov
fuente
1

En mi caso, he reinstalado ubuntu y el nombre de usuario ha cambiado desde el anterior. En este caso, la clave ssh generada también difiere de la anterior.

El problema se solucionó simplemente copiando la clave pública ssh actual, en el repositorio. La clave estará disponible en su usuario/home/.ssh/id_rsa.pub

Sonu
fuente
1

En mi MAC resolví esto con:

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

Por alguna razón, mi git se detuvo para encontrar la clave privada en el github_rsa archivo. Esto sucedió en un repositorio específico. Quiero decir que en otros repositorios git siguió funcionando normalmente.

Creo que es un error.

Podría encontrar este comportamiento ejecutándose ssh -vT [email protected]

CelinHC
fuente