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
Un servidor SSH embebido antiguo
frecuenteLos switches, cortafuegos, impresoras y dispositivos de almacenamiento suelen ejecutar dropbear o versiones antiguas de OpenSSH con claves de host RSA/SHA-1 únicamente.
Un servidor sin claves de host modernas
ocasionalLos sistemas instalados hace mucho tiempo pueden tener solo una clave de host RSA y un sshd demasiado antiguo para firmar con `rsa-sha2-256/512`.
Una configuración restringida del cliente
ocasionalUna línea `HostKeyAlgorithms` en `~/.ssh/config` o en `/etc/ssh/ssh_config.d` que solo incluye Ed25519 rechaza los servidores que solo tienen claves ECDSA o RSA.
Cómo solucionarlo
- 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.
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