Error de Git: "Error de verificación de clave de host" al conectarse al repositorio remoto

222

Estoy tratando de conectarme a un repositorio remoto de Git que reside en mi servidor web y clonarlo en mi máquina.

Estoy usando el siguiente formato para mi comando:

git clone ssh://[email protected]/repository.git

Esto ha funcionado bien para la mayoría de los miembros de mi equipo. Por lo general, después de ejecutar este comando, Git solicitará la contraseña del usuario y luego ejecutará la clonación. Sin embargo, cuando se ejecuta en una de mis máquinas aparece el siguiente error:

La verificación de la clave del host ha fallado.

fatal: no se pudo leer desde el repositorio remoto.

No estamos usando claves SSH para conectarnos a este repositorio, por lo que no estoy seguro de por qué Git está buscando una en esta máquina en particular.

bootsz
fuente
1
Usted está utilizando SSH para conectarse a este repositorio, aviso cómo su URL comienza conssh://
Brandon
Tengo un problema similar . puede alguien ayudarme por favor? Estoy atascado :(
SepSol

Respuestas:

164

Se está conectando a través del protocolo SSH, como lo indica el ssh://prefijo en su URL de clonación. Usando SSH, cada host tiene una clave. Los clientes recuerdan la clave de host asociada con una dirección en particular y se niegan a conectarse si una clave de host parece cambiar. Esto evita los ataques del hombre en el medio.

La clave de host para domain.com ha cambiado. Si esto no le parece sospechoso , elimine la clave anterior de su caché local editando ${HOME}/.ssh/known_hostspara eliminar la línea de domain.com o dejando que una utilidad SSH lo haga por usted con

ssh-keygen -R domain.com

Desde aquí, registre la clave actualizada ya sea haciéndola usted mismo con

ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts

o, equivalentemente, dejar que sshlo haga por usted la próxima vez que se conecte con git fetch, git pullo git push(o incluso un ol llano' ssh domain.com), respondiendo que sí cuando se le solicite

No se puede establecer la autenticidad del host 'domain.com (abcd)'.
La huella digital de la clave RSA es XX: XX: ...: XX.
¿Estás seguro de que deseas continuar conectando (sí / no)?

La razón de este aviso es domain.com ya no está en su known_hostsdespués de eliminarlo y presumiblemente no en el sistema /etc/ssh/ssh_known_hosts, por lo que sshno tiene forma de saber si el host en el otro extremo de la conexión es realmente domain.com. (Si hay una clave incorrecta /etc, alguien con privilegios administrativos tendrá que actualizar el archivo de todo el sistema).

Le recomiendo que considere que los usuarios también se autentiquen con claves. De esa manera, ssh-agentpuede almacenar material clave por conveniencia (en lugar de que todos tengan que ingresar su contraseña para cada conexión al servidor), y las contraseñas no pasan por la red.

Greg Bacon
fuente
3
Dato curioso, ejecutar sudo ssh-keygen -R domain.compuede cambiar el nombre de su known_hostsarchivo existente para que sea known_hosts.old, y crear una copia que solo sea legible por root . ( -rw------- root root) Puede chowndevolverlo fácilmente al usuario apropiado, pero también puede desperdiciar una tarde depurando por qué git está roto. : D
Andrew Rueckert
1
Are you sure you want to continue connecting (yes/no)?. No cometas el mismo error que yo. Tiene que escribir yes. Simplemente presionando enter no selecciona sí por defecto
JolonB
306

Como respondí anteriormente en Clonación, el repositorio git causa un error: la verificación de la clave del host falló. fatal: el extremo remoto se colgó inesperadamente , agregue GitHub a la lista de hosts autorizados:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

Tupy
fuente
3
Esta es la forma más segura, a menos que ya tenga la llave presente. Eso supone que solo lo ejecutas una vez, no cada vez que te conectas al servidor.
Zenexer
El repositorio de ajustes privados de mi empresa está utilizando ecdsa como clave, por lo que si la solución no funciona, tal vez sea porque el algoritmo no es correcto
Fendy
8
Esta debería ser la respuesta aceptada. Gracias por salvarme el día.
Keyur
funcionó para mí también, me preguntaba por qué no podía clonar mi propio repositorio
StackAttack
Alguien ha marcado esta publicación (incorrectamente). De la crítica .
Wai Ha Lee
55

Tuve el problema similar, pero, usando claves SSH. Por la respuesta de Tupy, más arriba, descubrí que el problema es que el archivo conocido_hosts no está presente o que github.com no está presente en la lista de hosts conocidos. Estos son los pasos que seguí para resolverlo:

  1. mkdir -p ~/.ssh
  2. ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  3. ssh-keygen -t rsa -C "user.email"
  4. abra la clave pública con este comando $ cat ~/.ssh/id_rsa.puby cópiela.
  5. Agregue la clave id_rsa.pub a la lista de claves SSH en su perfil de GitHub.
Saran
fuente
1
@OJFord FYI: he editado la respuesta original de manera que tu comentario quede obsoleto. TBH y con el debido respeto, no era del todo correcto en primer lugar. El touchcomando fallaría en caso de que el ~/.sshdirectorio no exista, por lo que el paso 1 aún era obligatorio. Además, no necesita touchel archivo antes de usar la >>redirección. Se creará si es necesario (pero solo el archivo, no la ruta completa, por lo que aún mkdir -pse necesita). La -popción lo hace funcionar en caso de que el directorio ya exista.
Tad Lispy
1
Es el número 2 ssh-keyscanque falta en los documentos de Github al agregar una nueva clave ssh.
Phil Andrews
1
Estaba teniendo problemas con mi Dockerfilefalta de permiso. Agregar el segundo paso aquí solucionó ese problema. Gracias por el gran trabajo
Spencer Pollock
37

Esto está sucediendo porque github no está actualmente en sus hosts conocidos.

Debería pedirte que agregues github a tus hosts conocidos. Si esto no ha sucedido, puede ejecutar ssh -T [email protected]para recibir el mensaje nuevamente.

Powderham
fuente
2
Esta es la respuesta correcta si nunca se le solicita.
Matthias Hagemann
15

Para mí, solo tenía que escribir "sí" en el mensaje que pregunta "¿Está seguro de que desea continuar conectando (sí / no)?" en lugar de simplemente presionar Enter.

Aprendiz de código
fuente
Esta respuesta me llevó a darme cuenta de que tenía que clonar manualmente mi repositorio en mi servidor de compilación para escribir 'sí' y agregar mi servidor bitbucket a mis conocidos_hosts
Sashah
1
@Sashah Si todo lo que necesita es el servidor bitbucket en conocido_hosts, puede editar el archivo manualmente. No es necesario clonar el repositorio si esta es la única razón para hacerlo.
Code-Apprentice
7

Tengo el mismo problema en un sistema recién instalado, pero este fue un problema de udev. No había /dev/ttynodo, así que tuve que hacer:

mknod -m 666 /dev/tty c 5 0
Geoffroy
fuente
1
Funcionó para mí porque / dev / tty fue creado como un archivo, ¡muy extraño! (por lo que debe eliminarlo y luego volver a crearlo con mknod)
Doomsday
@ Geoffroy, eliminé / dev / tty y ahora cuando hago sudo, me enfrento a este error: sudo: lo siento, debes tener un tty para ejecutar sudo
Milad
@ xe4me Nunca dije que debería eliminarlo, dependiendo del sistema que realmente sea necesario. Reiniciar debería solucionarlo.
Geoffroy
@Geoffroy, en realidad el primer comentarista, dijo que tenía que eliminar y volver a crear: d No, reiniciar no funcionó, tuve que decir la raíz, lo arregló: d
Milad
6

Si está en la intranet de la oficina (por lo demás peligrosa) que siempre está protegida por firewalls, simplemente tenga las siguientes líneas en su ~ / .ssh / config

Host *
StrictHostKeyChecking no
UserKnownHostsFile = / dev / null

sunil
fuente
2
Esto sigue siendo peligroso, con nuestro sin firewalls corporativos. ¿Cómo sabes que estás hablando con el github real sin verificar la clave del servidor?
Mnebuerquo
1
En entornos corporativos, los repositorios de git locales se utilizan principalmente, nunca de código abierto. En el peor de los casos, la configuración .ssh en la parte superior del archivo puede tener líneas de configuración relacionadas con el host explícito github para que ssh elija coincidencias más específicas.
sunil
5

Lo que funcionó para mí fue agregar primero mi clave SSH de la nueva computadora, seguí estas instrucciones de GitLab: agregar clave SSH . Tenga en cuenta que desde que estoy en Win10, tuve que hacer todos estos comandos en Git Bash en Windows (no funcionaba en el cmd Shell de DOS normal).

Por otra parte, en Git Bash, tuve que hacer uno git clonede los repositorios con los que tuve problemas, y en mi caso tuve que clonarlo con un nombre diferente ya que ya lo tenía localmente y no quería perder mis compromisos. Por ejemplo

git clone ssh://git@gitServerUrl/myRepo.git myRepo2

Luego recibí el mensaje para agregarlo a la lista de hosts conocidos, la pregunta podría ser esta:

¿Estás seguro de que deseas continuar conectando (sí / no)?

Escribí "sí" y finalmente funcionó, normalmente debería recibir un mensaje similar a este:

Advertencia: se agregó permanentemente '[su enlace de repositorio]' (ECDSA) a la lista de hosts conocidos.

Nota : si está en Windows, asegúrese de usar Git Bash para todos los comandos, esto no funcionó en cmd shell o powershell normal, realmente tuve que hacer esto en Git Bash.

Por último, eliminé el segundo repositorio de clones ( myRepo2en el ejemplo) y volví a mi primer repositorio y finalmente pude hacer todas las cosas de Git como de costumbre en mi editor favorito VSCode.

ghiscoding
fuente
De hecho, mi indicador Cygwin se ve casi exactamente como mi indicador git bash, ¡pero solo funciona en el indicador git bash!
Josiah Yoder
3

Si está utilizando git para Windows.

  • Abra la GUI de git.
  • Abra el repositorio local de git en git GUI.
  • Agregue el control remoto o presione si el control remoto ya existe.
  • Responda "sí" a la pregunta sobre si desea continuar.

El cliente GUI agrega la clave para que usted lo haga ~/.ssh/known_hosts. Esto es más fácil de recordar si no lo hace con frecuencia y también evita la necesidad de usar la línea de comando git (las líneas de comando estándar de Windows no tienen el ssh-keyscanejecutable.

Julian Knight
fuente
2

Cuando el servidor remoto desea conectarse al repositorio privado, se autenticaría a través de ssh. Cree el par de claves pública-privada con ssh-keygen o si ya tiene la clave pública-privada. copie y pegue la clave pública en la Configuración del repositorio privado.

YourPrivateRepo -> Configuración -> Implementar claves -> Agregar clave de implementación -> Pegar la clave pública.

Ahora el servidor remoto podría conectarse al repositorio privado.

NOTA: Las claves de implementación solo tienen acceso para leer el repositorio. Necesidad de permitir explícitamente el acceso de escritura.

Arenoso
fuente
1

Significa que se cambió la clave de host remoto (puede ser un cambio de contraseña de host)

Su terminal sugirió ejecutar este comando como usuario root

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]

Debe eliminar ese nombre de host de la lista de hosts en su PC / servidor. Copie el comando sugerido y ejecútelo como usuario root.

$ sudo su                                                        // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]    // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                           // Exist from root user

Inténtalo de nuevo, espero que esto funcione.

Jay Patel
fuente
Nota: dependiendo de su shell, puede que tenga que escapar de los corchetes \ [y \] o usar comillas.
Phlarx
1

Cuando se le preguntó:

Are you sure you want to continue connecting (yes/no)?

Escriba yes como respuesta

Así es como resolví mi problema. Pero si intentas presionar el botón enter, ¡no funcionará!

shutsuke
fuente
0

Puedes usar tu "git url" en formato URL 'https' en el archivo Jenkins o donde quieras.

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'

Nitina
fuente
0

Estaba enfrentando el mismo error dentro de DockerFile durante el tiempo de compilación mientras la imagen era pública. Hice poca modificación en Dockerfile.

 RUN git clone  https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs

Esto se debe a que al usar [email protected]: ... la sintaxis termina> usando SSH para clonar, y dentro del contenedor, su clave privada no está> disponible. En su lugar, querrá usar RUN git clone> https://github.com/edenhill/librdkafka.git .

Adiii
fuente
-1

Tuve el problema similar, desafortunadamente utilicé la HMI de GitExtensions y olvidé que escribí una frase de contraseña. Con HMI ... ¡olvídalo! ¡No ingrese la frase de contraseña cuando genere su clave!

Jerome Vacher
fuente
-4

Recibí este mensaje cuando intenté git cloneun repositorio que no era mío. La solución fue bifurcar y luego clonar.

fyodrs
fuente