No se puede negociar con XX.XXX.XX.XX: no se encontró ningún tipo de clave de host coincidente. Su oferta: ssh-dss


110

Estoy tratando de crear un repositorio de git en mi servidor web y clonarlo en mi computadora. Esto es lo que hice:

  1. Creé un repositorio en el servidor remoto.
  2. Me genera un par de claves: ssh-keygen -t dsa.
  3. Agregué mi clave a ssh-agent.
  4. Copié a la clave pública del servidor en ~/.ssh.

Y luego, después de un intento de ejecutar el comando git clone ssh://user@host/path-to-repository, aparece un error:

No se puede negociar con XX.XXX.XX.XX: no se encontró ningún tipo de clave de host coincidente. Su oferta: ssh-dss
fatal: no se pudo leer desde el repositorio remoto.
Asegúrese de tener los derechos de acceso correctos y de que el repositorio existe.

Qué significa eso?


Respuestas:


171

La versión reciente de openssh desaprobó las claves DSA de forma predeterminada. Debe sugerirle a su proveedor de GIT que agregue una clave de host razonable. Depender únicamente de los DSA no es una buena idea.

Como solución alternativa, debe informar a su sshcliente que desea aceptar claves de host DSA, como se describe en la documentación oficial para el uso heredado . Tiene pocas posibilidades, pero le recomiendo agregar estas líneas a su ~/.ssh/configarchivo:

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

Otra posibilidad es usar la variable de entorno GIT_SSHpara especificar estas opciones:

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@host/path-to-repository

1
Ahora ha funcionado sin especificar el nombre de host, solo con HostkeyAlgorithms +ssh-dss. Gracias.
giovannipds

1
@giovannipds Sin duda, debe ser el host remoto al que se está conectando. @ downvoters Explicar los votos negativos sería bueno.
Jakuje

@Jakuje, lo siento, hice clic mal y, debido a la imposibilidad de cambiar de inmediato, no pude actualizar mi respuesta.
giovannipds

1
@Jakuje Ya actualicé mi voto, solo para avisarte. =)
giovannipds

Si no existe tal archivo en su directorio .ssh, un archivo de texto vacío llamado "config" servirá.
RMorrisey

78

También puede agregar -oHostKeyAlgorithms=+ssh-dssen su línea ssh:

ssh -oHostKeyAlgorithms=+ssh-dss user@host

Esta es la solución más rápida +1 porque también soluciona permanentemente el problema para ese host. Una sugerencia más para el largo plazo es que, si es posible, el sistema host debería actualizar su demonio SSH, ya que parece que DSS ya no lo considera muy seguro.
Areeb Soo Yasir

20

Para mí esto funcionó: (agregado a .ssh\config)

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss

La segunda opción no está relacionada con el problema y la primera ya se menciona en mi respuesta.
Jakuje

Host your-host no funcionó para mí, siempre que your-host sea el nombre del host desde el que estoy ejecutando el comando ssh (cliente). Pero Host * funcionó para mí.
Krischu

2
@Krischu no, yuor-hostes el anfitrión sshcontra el que te enfrentas. Establecer valores predeterminados no seguros para todos los hosts siempre es una mala idea.
Jakuje

10

Si eres como yo, y prefieres no hacer este sistema de agujeros de seguridad o para todo el usuario, puedes agregar una opción de configuración a cualquier repositorio git que lo necesite ejecutando este comando en esos repositorios. (la nota solo funciona con la versión de git> = 2.10, lanzada el 2016-09-04)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'

Sin embargo, esto solo funciona después de que se configura el repositorio. Si no se siente cómodo agregando un control remoto manualmente (y solo desea clonar), puede ejecutar el clon de esta manera:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@host/path-to-repository

luego ejecute el primer comando para hacerlo permanente.

Si no tiene lo último y aún así le gustaría mantener el hoyo lo más local posible, le recomiendo poner

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'

en un archivo en algún lugar, digamos git_ssh_allow_dsa_keys.sh, e sourceingréselo cuando sea necesario.


3

Quiero colaborar un poco con la solución del lado del servidor. Entonces, el servidor dice que no es compatible con DSA, esto se debe a que el cliente openssh no lo activa de forma predeterminada :

OpenSSH 7.0 y versiones posteriores deshabilitan de manera similar el algoritmo de clave pública ssh-dss (DSA). También es débil y no recomendamos su uso.

Entonces, para solucionar esto en el lado del servidor, debería activar otros algoritmos clave como RSA o ECDSA. Acabo de tener este problema con un servidor en una lan. Sugiero lo siguiente:

Actualice el openssh:

yum update openssh-server

Fusionar nuevas configuraciones en sshd_config si hay un sshd_config.rpmnew.

Verifique que haya claves de hosts en / etc / ssh /. Si no genera otros nuevos, consulte man ssh-keygen.

$ ll /etc/ssh/
total 580
-rw-r--r--. 1 root root     553185 Mar  3  2017 moduli
-rw-r--r--. 1 root root       1874 Mar  3  2017 ssh_config
drwxr-xr-x. 2 root root       4096 Apr 17 17:56 ssh_config.d
-rw-------. 1 root root       3887 Mar  3  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Aug 30 15:33 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 Aug 30 15:33 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 Aug 30 15:33 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 Aug 30 15:33 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 Aug 30 15:33 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 Aug 30 15:33 ssh_host_rsa_key.pub

Verifique en / etc / ssh / sshd_config la configuración de HostKey. Debería permitir la configuración de RSA y ECDSA. (Si todos ellos están comentados por defecto permitirá también el RSA, ver en man sshd_configla parte de HostKey).

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

Para el lado del cliente, cree una clave para ssh (no un DSA como en la pregunta) simplemente haciendo esto:

ssh-keygen

Después de esto, debido a que hay más opciones que ssh-dss (DSA), el cliente openssh (> = v7) debería conectarse con RSA o un algoritmo mejor.

Aquí otro buen artículo.

Esta es mi primera pregunta respondida, doy la bienvenida a sugerencias: D.


1

¿Cómo se especificarían varios algoritmos? Lo pregunto porque git acaba de actualizarse en mi computadora portátil de trabajo (Windows 10, usando la compilación oficial de Git para Windows) y recibí este error cuando intenté enviar una rama del proyecto a mi control remoto de Azure DevOps. Traté de empujar --set-upstream y obtuve esto:

Unable to negotiate with 20.44.80.98 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
fatal: Could not read from remote repository.

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

Entonces, ¿cómo se implementarían las sugerencias anteriores teniendo en cuenta ambos? (Como solución rápida, utilicé la solución de @ golvok con group14 y funcionó, pero realmente no sé si 1 o 14 es mejor, etc.)


-3

O sigue el enfoque anterior o este

Cree el archivo de configuración en el directorio .ssh y agregue estas líneas.

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1

Eso está resolviendo un problema completamente diferente.
Jakuje
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.