Saltar al contenido
ecdsa.com
OpenSSH client (8.8+) connecting to a server that only offers legacy host key algorithmsSSH

Mensaje de error

Unable to negotiate with 127.0.0.1 port 22: no matching host key type found. Their offer: ssh-rsa

También se muestra como

  • no matching host key type found. Their offer: ssh-rsa,ssh-dss
  • Unable to negotiate with 127.0.0.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1

El host y el puerto varían, y también la oferta del servidor. Para el intercambio de claves el texto dice «no matching key exchange method found», y para los algoritmos de cifrado, «no matching cipher found».

Qué significa

El cliente y el servidor no comparten ningún algoritmo de clave de host, así que la conexión se detiene durante la negociación de algoritmos, antes de la verificación del host o del inicio de sesión. «Their offer» enumera lo que propuso el servidor. `ssh-rsa` (RSA con SHA-1) y `ssh-dss` (DSA) están desactivados de forma predeterminada en OpenSSH 8.8 y versiones posteriores; los servidores que no ofrecen nada más suelen ser dispositivos antiguos, routers, NAS o sistemas sin parches. La variante del intercambio de claves («no matching key exchange method found») tiene la misma forma y las mismas soluciones.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Permitir el algoritmo antiguo solo para ese host

    Un bloque `Host` limita SHA-1 al dispositivo que lo necesita. Nunca pongas `+ssh-rsa` bajo `Host *`.

    text
    # ~/.ssh/config - re-enable the legacy algorithm for that one device only
    Host old-switch.lan
      HostKeyAlgorithms +ssh-rsa
      PubkeyAcceptedAlgorithms +ssh-rsa
  2. 2.

    Dar al servidor claves de host modernas

    Actualizar el firmware o el OpenSSH del dispositivo y generar claves de host Ed25519/ECDSA elimina la necesidad de excepciones.

    bash
    # On the server: generate modern host keys and let sshd offer them
    ssh-keygen -A                                   # creates missing ed25519/ecdsa host keys
    sshd -T | grep -E "^hostkeyalgorithms|^hostkey "  # what the server will offer

Errores relacionados

Explorar toda la base de datos de errores de firma