Mensagem de erro
Unable to negotiate with 127.0.0.1 port 22: no matching host key type found. Their offer: ssh-rsa
Também aparece 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
O host e a porta, assim como a oferta do servidor, variam. Para a troca de chaves, o texto é “no matching key exchange method found”; para cifras, “no matching cipher found”.
O que significa
Cliente e servidor não têm nenhum algoritmo de chave de host em comum, então a conexão para durante a negociação de algoritmos — antes da verificação do host ou do login. “Their offer” lista o que o servidor propôs. `ssh-rsa` (RSA com SHA-1) e `ssh-dss` (DSA) vêm desativados por padrão no OpenSSH 8.8 e posteriores; servidores que não oferecem nada além disso costumam ser equipamentos antigos, roteadores, NAS ou sistemas sem atualizações. A variante da troca de chaves (“no matching key exchange method found”) tem a mesma forma e as mesmas soluções.
Por que acontece
Um servidor SSH embarcado antigo
comumSwitches, firewalls, impressoras e dispositivos de armazenamento muitas vezes rodam o dropbear ou versões antigas do OpenSSH só com chaves de host RSA/SHA-1.
Um servidor sem chaves de host modernas
ocasionalSistemas instalados há muito tempo podem ter apenas uma chave de host RSA e um sshd antigo demais para assinar com `rsa-sha2-256/512`.
Uma configuração restritiva no cliente
ocasionalUma linha `HostKeyAlgorithms` em `~/.ssh/config` ou em `/etc/ssh/ssh_config.d` que lista apenas Ed25519 rejeita servidores que só têm chaves ECDSA ou RSA.
Como corrigir
- 1.
Permitir o algoritmo legado só para esse host
Um bloco `Host` mantém o SHA-1 restrito ao dispositivo que precisa dele. Nunca coloque `+ssh-rsa` em `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 ao servidor chaves de host modernas
Atualizar o firmware do dispositivo ou o OpenSSH e gerar chaves de host Ed25519/ECDSA elimina a necessidade de exceções.
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