Найти тему
В движении

Устаревшие алгоритмы шифрования SSH. VMware 4.1

Подключаемся к древнему Dell PowerEdge R710 2xIntel(R) Xeon(R) CPU E5620 под управлением VMware EXSi 4.1.0 по ssh.

Обычно ssh поддерживает большое количество алгоритмов шифрования. Но со временем часть алгоритмов была признана слабыми и не каждый клиент их может поддерживать. Записывают тут для себя в заметки что делать, если OpenSSH отказывается подключаться к серверу, который поддерживает только устаревшие алгоритмы.

Когда ssh-клиент подключается к серверу, они обмениваются списком поддерживающих алгоритмов. В конфиге ssh есть соответствующие записи:

  • KexAlgorithms: методы обмена ключами, которые используются при каждом соединении
  • HostkeyAlgorithms: алгоритмы открытого ключа, принимаемые сервером SSH для аутентификации клиента
  • Ciphers: шифры
  • MACs: коды аутентификации сообщений, используемые для обнаружения изменения трафика

В моём случае, клиент и сервер не смогли договориться и выдали такое сообщение:

Unable to negotiate with 192.168.XX.XX port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

В данном случае клиент и сервер не смогли согласовать алгоритм обмена ключами. Сервер предлагает только один метод diffie-hellman-group1-sha1. OpenSSH поддерживает этот метод, но не включает его по умолчанию, поскольку он слабый и теоретически уязвим для атаки называемой Logjam.

Лечится это добавлением алгоритма Diffie Hellman. Можно просто написать в командной строке

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

Или находим в ssh-config и добавляем там пару строк:

Host название или IP-address нашего хоста и параметры

Host hostname

KexAlgorithms +diffie-hellman-group1-sha1

Здесь "+" добавляет алгоритм к списку существующих, а не заменяет по умолчанию.

В Linux есть полезные команды для перезапуска ssh:

systemctl status sshd
sudo systemctl start sshd
sudo systemctl stop sshd
sudo systemctl restart sshd

перезапускам службу и проверяем работу.

В macOS ssh перегружается по-другому:

# high sierra
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
# latest
sudo vim /etc/services # (update the port config for ssh and save)
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

Может так получиться, что это не поможет. В моём случае ответ от сервера выглядел так:

Unable to negotiate with 192.168.XX.XX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

Дело в том, что OpenSSH 7.0 и более поздние версии отключают поддержку алгоритмов открытого ключа -ssh-dss (DSA).

Но его можно включить с помощью:

ssh -oHostKeyAlgorithms=+ssh-dss user@hostname

Или добавить в конфигурационный файл /etc/ssh/ssh_config ещё одну строку

-2

Не забываем сделать рестарт сервиса ssh и пробуем законнектиться.

Полезные команды:

ssh -Q cipher # список поддерживаемых шифров

ssh -Q mac # поддерживаемые алгоритмы MAC (message authentication code)

ssh -Q key # поддерживаемые типа открытых ключей

ssh -Q kex # Список поддерживаемых алгоритмов обмена ключами