Failed to Test Connection for "Node": Unable to negotiate with port X: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

opConfig makes use of the OpenSSH client as the root user therefor you can adapt some of it's behaviours by modifying /root/.ssh/config  .  Note: the only thing, it does not use is the ssh keys from the /root/.ssh folder, as the keys are saved in the database and a temporary file is created to get the connection

OpenSSH implements all of the cryptographic algorithms needed for compatibility with standards-compliant SSH implementations, but since some of the older algorithms have been found to be weak, not all of them are enabled by default. This page describes what to do when OpenSSH refuses to connect with an implementation that only supports legacy algorithms.

When an SSH client connects to a server, each side offers lists of connection parameters to the other. These are, with the corresponding ssh_config keyword:

  • KexAlgorithms: the key exchange methods that are used to generate per-connection keys
  • HostkeyAlgorithms: the public key algorithms accepted for an SSH server to authenticate itself to an SSH client
  • Ciphers: the ciphers to encrypt the connection
  • MACs: the message authentication codes used to detect traffic modification

For a successful connection, there must be at least one mutually-supported choice for each parameter.

If the client and server are unable to agree on a mutual set of parameters then the connection will fail. OpenSSH (7.0 and greater) will produce an error message like this:

Unable to negotiate with legacyhost: no matching key exchange method found.
Their offer: diffie-hellman-group1-sha1

For the case of the above error message, OpenSSH can be configured to enable the diffie-hellman-group1-sha1 key exchange algorithm (or any other that is disabled by default) using the KexAlgorithms option.

To test what key exchanges will work you can use the Command Line:

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@legacyhost

Then to enable opConfig to make use of these changes one can edit the /root/.ssh/config file and add exceptions for particular hosts:

The Host entry does accept wildcards e.g. Host * see PATTERNS section in "man ssh_config"

KexAlgorithms +diffie-hellman-group1-sha1
Ciphers +aes256-cbc

If you change the remote servers ssh server settings (/etc/ssh/sshd_config) to accept the desired key exchange, remember you need to restart the sshd service (On the server where the weaker crypto algorithm was allowed in): 

service sshd restart

  • No labels