Les messages
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
Avant la connexion, le client et le serveur doivent s'accorder sur une liste d'algorithmes. Ce message signifie qu'ils n'ont rien en commun, et Their offer vous indique ce que le serveur sait faire. OpenSSH inclut encore de nombreux anciens algorithmes, mais ne les utilise pas tant que vous ne le demandez pas. Cela arrive souvent avec de vieux équipements réseau, des imprimantes, des boîtiers de stockage et d'anciens systèmes Linux, souvent juste après la mise à jour de votre client.
Des noms comme ext-info-s et kex-strict-s-v00@openssh.com dans l'offre sont des marqueurs de protocole, pas des algorithmes que vous pouvez choisir. Ignorez-les.
L'autoriser pour un seul hôte
Chaque message correspond à une option :
| Message | Option |
|---|---|
no matching key exchange method found | KexAlgorithms |
no matching host key type found | HostKeyAlgorithms |
no matching cipher found | Ciphers |
no matching MAC found | MACs |
Essayez d'abord une fois en ligne de commande, en recopiant le nom depuis l'offre :
ssh -o KexAlgorithms=+diffie-hellman-group14-sha1 user@203.0.113.10
Un ancien appareil en demande souvent plusieurs, et ils apparaissent un par un, car le client s'arrête au premier désaccord. Ajoutez chacun à ~/.ssh/config :
Host old-switch
HostName 203.0.113.10
User user
KexAlgorithms +diffie-hellman-group14-sha1
HostKeyAlgorithms +ssh-rsa
Ciphers +aes128-cbc
Gardez le +. Il ajoute à la liste par défaut : les algorithmes modernes restent en tête et sont utilisés dès que l'appareil les prend en charge. Sans lui, vous remplacez toute la liste.
Gardez cela dans un bloc Host nommé et jamais sous Host *, ce qui abaisserait le niveau de sécurité pour tous les serveurs. De plus, ssh utilise la première valeur trouvée pour chaque option : placez donc ce bloc au-dessus de tout bloc général qui définit la même option.
Votre clé RSA est refusée sans explication
Si un ancien serveur ne comprend que les signatures ssh-rsa pour les clés utilisateur, le client dit simplement Permission denied (publickey), sans parler d'algorithmes. Nous avons obtenu ce résultat avec un serveur limité à ssh-rsa. L'ajout de cette ligne pour l'hôte a réglé le problème :
PubkeyAcceptedAlgorithms +ssh-rsa
ssh-dss n'a pas de contournement
OpenSSH 10.0 a complètement supprimé DSA. On ne peut pas demander à un client en version 10 de l'utiliser :
command-line line 0: Bad key types '+ssh-dss'.
Si un appareil ne propose que ssh-dss, mettez-le à jour. D'ici là, le seul moyen d'entrer est un client plus ancien, par exemple dans une machine virtuelle sur un réseau de confiance.
Voir ce que chaque côté prend en charge
Ce que votre client sait faire, y compris ce qu'il n'active pas par défaut :
ssh -Q kex
ssh -Q HostKeyAlgorithms
ssh -Q cipher
ssh -Q mac
Ce que votre client proposerait réellement à cet hôte :
ssh -G server | grep -E '^(kexalgorithms|hostkeyalgorithms|ciphers|macs) '
Tout ce que propose le serveur, d'un seul coup plutôt qu'une erreur à la fois :
ssh -vv user@server 2>&1 | grep -A9 'peer server KEXINIT'
Ce que vous acceptez
Ces algorithmes sont désactivés pour une raison. La faiblesse ne s'applique qu'à cette connexion :
diffie-hellman-group1-sha1utilise un groupe de 1024 bits et SHA-1.ssh-rsasigne avec SHA-1. OpenSSH l'a désactivé par défaut dans la version 8.8. La clé RSA elle-même n'est pas le problème : un serveur moderne utilise la même clé avecrsa-sha2-256oursa-sha2-512. Pour le même problème avec les clés utilisateur, voir no mutual signature supported.- Les chiffrements CBC et
hmac-md5sont de vieilles conceptions que des modes plus récents ont remplacées.
Considérez cela comme temporaire, et gardez un tel appareil sur un réseau d'administration, loin d'Internet.
La vraie solution sur l'appareil
- Mettez-le à jour. Les mises à jour de firmware ajoutent souvent des algorithmes modernes. Consultez la documentation du constructeur sur SSH ou le durcissement de l'administration.
- Vérifiez ses réglages. De nombreux appareils prennent en charge de meilleurs algorithmes qui sont simplement désactivés. Sur un serveur Linux, ceci montre ce qui est actif :
Supprimez toute ancienne lignesudo sshd -T | grep -iE '^(kexalgorithms|hostkeyalgorithms|ciphers|macs) 'KexAlgorithms,HostKeyAlgorithms,CiphersouMACsde/etc/ssh/sshd_configet de son dossier d'inclusion pour revenir aux valeurs par défaut. - Générez une clé d'hôte moderne si le serveur n'en a pas :
L'unité s'appellesudo ssh-keygen -t ed25519 -N '' -f /etc/ssh/ssh_host_ed25519_key sudo systemctl restart sshdsshsur Debian et Ubuntu. Les clients peuvent alors afficher un avertissement de clé d'hôte modifiée : prévoyez-le. - Retirez le contournement de votre configuration et reconnectez-vous pour confirmer.
Un avertissement voisin, pas une erreur
Depuis OpenSSH 10.1, une connexion qui fonctionne mais utilise un ancien échange de clés affiche ceci :
** 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 session se connecte bel et bien, et la solution se trouve sur le serveur. Ce que cela signifie et comment le corriger ou le masquer : l'avertissement sur l'échange de clés post-quantique.
Questions
Est-il sûr d'activer diffie-hellman-group14-sha1 ?
Seulement comme solution provisoire pour un ancien appareil sur un réseau de confiance. Il repose sur SHA-1, gardez-le donc dans le bloc Host de cet hôte et jamais sous Host *.
Pourquoi est-ce apparu après une mise à jour ?
Les clients OpenSSH récents ne proposent plus les anciens algorithmes par défaut. Le serveur n'a pas changé : c'est votre client qui n'accepte plus ce qu'il propose.
Que signifie le + devant un algorithme ?
Il ajoute l'algorithme à la liste par défaut au lieu de la remplacer, donc les algorithmes modernes restent en tête et servent dès que l'appareil les prend en charge.
Sources
- OpenSSH : options héritées (legacy)
- ssh_config(5), manuel OpenBSD
- Notes de version OpenSSH 8.8 : ssh-rsa désactivé par défaut
- Notes de version OpenSSH 10.0 : DSA supprimé
- OpenSSH : cryptographie post-quantique