Сообщение об ошибке
Unable to negotiate with 127.0.0.1 port 22: no matching host key type found. Their offer: ssh-rsa
Также выводится как
- no matching host key type found. Their offer: ssh-rsa,ssh-dss
- Unable to negotiate with 127.0.0.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1
Хост, порт и предложение сервера меняются. Для обмена ключами текст выглядит как «no matching key exchange method found», для шифров — «no matching cipher found».
Что это означает
У клиента и сервера нет ни одного общего алгоритма ключа хоста, поэтому соединение прерывается на этапе согласования алгоритмов — ещё до проверки хоста и входа. В «Their offer» перечислено то, что предложил сервер. `ssh-rsa` (RSA с SHA-1) и `ssh-dss` (DSA) в OpenSSH 8.8 и новее по умолчанию отключены; серверы, которые больше ничего не предлагают, обычно оказываются старыми специализированными устройствами, роутерами, NAS или системами без обновлений. Вариант с обменом ключами («no matching key exchange method found») выглядит так же и устраняется так же.
Почему это происходит
Старый встроенный SSH-сервер
частоНа коммутаторах, межсетевых экранах, принтерах и системах хранения данных часто работают dropbear или старые версии OpenSSH только с ключами хоста RSA/SHA-1.
Сервер без современных ключей хоста
иногдаНа давно установленных системах может быть только ключ хоста RSA и sshd, слишком старый, чтобы подписывать с `rsa-sha2-256/512`.
Ограниченная конфигурация клиента
иногдаСтрока `HostKeyAlgorithms` в `~/.ssh/config` или `/etc/ssh/ssh_config.d`, в которой указан только Ed25519, отвергает серверы, у которых есть только ключи ECDSA или RSA.
Как исправить
- 1.
Разрешите устаревший алгоритм только для этого хоста
Блок `Host` ограничивает SHA-1 только тем устройством, которому это нужно. Никогда не добавляйте `+ssh-rsa` в `Host *`.
text # ~/.ssh/config - re-enable the legacy algorithm for that one device only Host old-switch.lan HostKeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa - 2.
Сгенерируйте на сервере современные ключи хоста
Обновление прошивки устройства или OpenSSH и генерация ключей хоста Ed25519/ECDSA избавляют от необходимости в исключениях.
bash # On the server: generate modern host keys and let sshd offer them ssh-keygen -A # creates missing ed25519/ecdsa host keys sshd -T | grep -E "^hostkeyalgorithms|^hostkey " # what the server will offer