17 Mar 2019
SSH: No Matching Key Exchange Method Found
Szenario: man hat gerade Debian 8.3 installiert, oder unter FreeBSD bzw. Gentoo den SSH-Client aktualisiert. Jetzt bekommt man, wenn man sich zu einem älteren Gerät verbinden will, folgende Fehlermeldung
Unable to negotiate with 123.123.123.123 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
Dies kommt zustande, weil bestimmte ältere kryptographische Verfahren regeläßig aus neueren SSH-Versionen entfernt werden. Es gibt speziell eine Webseite, auf der das OpenSSH-Team dies erläutert: http://www.openssh.com/legacy.html
- Fall 1: man hat einen neueren Client, und will sich auf einen Legacy-Server verbinden:
Ssh kann so verwendet werden, dass es diffie-hellman wieder erlaubt:
chrissie@newhost: $ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@somehost.example.org
dauerhaft kann dies aktiviert werden durch einen Eintrag in der Datei ~/.ssh/config
Host somehost.example.org
KexAlgorithms +diffie-hellman-group1-sha1
- Fall 2: man hat einen neueren Server, aber viele Legacy Clients, die sich verbinden müssen. Man schafft es auf absehbare Zeit nicht, alle Clients zu aktualisieren. (Das sollte aber das Ziel sein!)
In diesem Fall muss man in der Datei /etc/ssh/sshd_config folgende Zeilen änder, und die Legacy Methoden wieder mit aufnehmen:
#Legacy changes
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
Ciphers 3des-cbc,blowfish-cbc,aes128-cbc,aes128-ctr,aes256-ctr
Es ist nötig, danach sshd neu zu starten und die Schlüssel neu zu generieren
root # ssh-keygen -A
root # service ssh restart