SSH "no matching key exchange method found" o "no matching host key type found": come risolvere

Il server offre solo vecchi algoritmi che il tuo client OpenSSH non abilita più di default. Per raggiungere quel singolo host, aggiungi l'algoritmo indicato in Their offer con un + nel suo blocco Host, per esempio KexAlgorithms +diffie-hellman-group14-sha1. Questo indebolisce solo quella connessione. La vera soluzione è aggiornare il dispositivo o le sue impostazioni SSH.

Aggiornata il . Ogni errore e ogni opzione + sono stati riprodotti con OpenSSH 10.3 su macOS contro un server OpenSSH 10.0 usa e getta su Debian 13, impostato per offrire solo il vecchio algoritmo.

I messaggi

Unable to negotiate with 203.0.113.10 port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,ext-info-s,kex-strict-s-v00@openssh.com
Unable to negotiate with 203.0.113.10 port 22: no matching host key type found. Their offer: ssh-rsa
Unable to negotiate with 203.0.113.10 port 22: no matching cipher found. Their offer: aes128-cbc
Unable to negotiate with 203.0.113.10 port 22: no matching MAC found. Their offer: hmac-md5

Prima del login, client e server devono accordarsi su un elenco di algoritmi. Questo messaggio significa che non hanno nulla in comune, e Their offer ti dice cosa può fare il server. OpenSSH include ancora molti vecchi algoritmi, ma non li usa a meno che tu non lo chieda. Succede spesso con vecchie apparecchiature di rete, stampanti, box di storage e vecchi sistemi Linux, spesso subito dopo l'aggiornamento del tuo client.

Nomi come ext-info-s e kex-strict-s-v00@openssh.com nell'offerta sono marcatori del protocollo, non algoritmi che puoi scegliere. Ignorali.

Consentirlo per un solo host

Ogni messaggio corrisponde a un'opzione:

MessaggioOpzione
no matching key exchange method foundKexAlgorithms
no matching host key type foundHostKeyAlgorithms
no matching cipher foundCiphers
no matching MAC foundMACs

Prova una volta da riga di comando, copiando il nome dall'offerta:

ssh -o KexAlgorithms=+diffie-hellman-group14-sha1 user@203.0.113.10

Un vecchio dispositivo spesso ne richiede più di uno, e compaiono uno alla volta, perché il client si ferma al primo disaccordo. Aggiungi ciascuno a ~/.ssh/config:

Host old-switch
    HostName 203.0.113.10
    User user
    KexAlgorithms +diffie-hellman-group14-sha1
    HostKeyAlgorithms +ssh-rsa
    Ciphers +aes128-cbc

Mantieni il +. Aggiunge all'elenco predefinito, quindi gli algoritmi moderni restano per primi e vengono usati appena il dispositivo li supporta. Senza, sostituisci l'intero elenco.

Tieni questo in un blocco Host con nome e mai sotto Host *, che abbasserebbe la soglia per ogni server. Inoltre ssh usa il primo valore che trova per ogni opzione, quindi metti questo blocco sopra qualsiasi blocco generale che imposti la stessa opzione.

La tua chiave RSA viene rifiutata senza spiegazioni

Se un vecchio server capisce solo le firme ssh-rsa per le chiavi utente, il client si limita a dire Permission denied (publickey), senza menzionare gli algoritmi. Lo abbiamo ottenuto con un server limitato a ssh-rsa. Aggiungere questa riga per l'host ha risolto:

PubkeyAcceptedAlgorithms +ssh-rsa

Per ssh-dss non c'è alcun rimedio

OpenSSH 10.0 ha rimosso del tutto DSA. A un client dalla versione 10 in poi non si può dire di usarlo:

command-line line 0: Bad key types '+ssh-dss'.

Se un dispositivo offre solo ssh-dss, aggiornalo. Fino ad allora, l'unico modo per entrare è un client più vecchio, per esempio in una macchina virtuale su una rete fidata.

Vedere cosa supporta ciascun lato

Cosa può fare in assoluto il tuo client, compreso ciò che non abilita di default:

ssh -Q kex
ssh -Q HostKeyAlgorithms
ssh -Q cipher
ssh -Q mac

Cosa offrirebbe davvero il tuo client a questo host:

ssh -G server | grep -E '^(kexalgorithms|hostkeyalgorithms|ciphers|macs) '

Tutto ciò che offre il server, in un colpo solo invece di un errore alla volta:

ssh -vv user@server 2>&1 | grep -A9 'peer server KEXINIT'

Cosa stai accettando

Questi algoritmi sono disattivati per un motivo. La debolezza riguarda solo quella connessione:

  • diffie-hellman-group1-sha1 usa un gruppo a 1024 bit e SHA-1.
  • ssh-rsa firma con SHA-1. OpenSSH lo ha disattivato di default nella versione 8.8. Il problema non è la chiave RSA in sé: un server moderno usa la stessa chiave con rsa-sha2-256 o rsa-sha2-512. Per lo stesso problema con le chiavi utente, vedi no mutual signature supported.
  • I cifrari CBC e hmac-md5 sono progetti vecchi che le modalità più recenti hanno sostituito.

Consideralo temporaneo e tieni un dispositivo simile su una rete di gestione, lontano da internet aperta.

La vera soluzione sul dispositivo

  1. Aggiornalo. Gli aggiornamenti del firmware spesso aggiungono algoritmi moderni. Controlla la documentazione del produttore su SSH o sul rafforzamento della gestione.
  2. Controlla le sue impostazioni. Molti dispositivi supportano algoritmi migliori che sono semplicemente disattivati. Su un server Linux, questo mostra cosa è attivo:
    sudo sshd -T | grep -iE '^(kexalgorithms|hostkeyalgorithms|ciphers|macs) '
    Rimuovi da /etc/ssh/sshd_config e dalla sua cartella di include le vecchie righe KexAlgorithms, HostKeyAlgorithms, Ciphers o MACs per tornare ai valori predefiniti.
  3. Genera una chiave host moderna se il server non ne ha:
    sudo ssh-keygen -t ed25519 -N '' -f /etc/ssh/ssh_host_ed25519_key
    sudo systemctl restart sshd
    L'unità si chiama ssh su Debian e Ubuntu. I client potrebbero poi mostrare un avviso di chiave host cambiata, quindi tienine conto.
  4. Rimuovi il rimedio provvisorio dalla tua configurazione e riconnettiti per confermare.

Un avviso correlato, non un errore

Da OpenSSH 10.1, una connessione che funziona ma usa uno scambio di chiavi più vecchio stampa questo:

** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html

La sessione si connette, e la soluzione sta sul server. Cosa significa e come risolverlo o zittirlo: l'avviso sullo scambio di chiavi post-quantistico.

Domande

È sicuro attivare diffie-hellman-group14-sha1?

Solo come rimedio temporaneo per un vecchio dispositivo su una rete fidata. Si basa su SHA-1, quindi tienilo nel blocco Host di quel solo host e mai sotto Host *.

Perché è iniziato dopo un aggiornamento?

I client OpenSSH più recenti smettono di offrire di base gli algoritmi vecchi. Il server non è cambiato: è il tuo client che non accetta più ciò che offre.

Cosa significa il + prima di un algoritmo?

Aggiunge l'algoritmo all'elenco predefinito invece di sostituirlo, così quelli moderni restano in testa e vengono usati appena il dispositivo li supporta.

Fonti

Altro in Messaggi di errore

Tutte le guide