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