Когда SSH-клиент и сервер не могут договориться об алгоритмах шифрования, соединение рвётся еще на этапе согласования. Обычно это происходит со старыми серверами, сетевым оборудованием или системами, которые давно не обновлялись. Надёжное решение почти всегда одно - обновить сервер или клиент, но если это невозможно, можно временно разрешить устаревший алгоритм вручную.
Почему возникает ошибка SSH algorithm mismatch
Проблема почти всегда связана с тем, что одна сторона предлагает только старые алгоритмы, а другая уже их не поддерживает. Так бывает, если сервер работает на устаревшей версии OpenSSH или использует старые криптографические настройки.
Частый сценарий - сервер ещё живёт на SHA1-алгоритмах, которые считаются небезопасными. Поэтому в новых версиях OpenSSH часть таких алгоритмов отключена по умолчанию.
Ошибка sign_and_send_pubkey: no mutual signature supported
Эта ошибка означает, что сервер хочет получить подпись ключом, который клиент не использует или не принимает. На практике чаще всего речь идёт об ssh-rsa.
OpenSSH отключил ssh-rsa по умолчанию начиная с версии 8.7, потому что этот алгоритм завязан на SHA1. SHA1 уже давно считается слабым, и его нельзя считать хорошим выбором для новых подключений.
Если у вас есть RSA-ключ, но сервер не принимает более новые варианты подписи, можно временно разрешить ssh-rsa:
ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa user@host
Если нужно включить это через конфиг, добавьте строку в /etc/ssh/ssh_config:
PubkeyAcceptedKeyTypes +ssh-rsa
Ошибка no matching key exchange method found
Эта ошибка появляется, когда сервер предлагает только старые методы обмена ключами, обычно на базе SHA1. В сообщении об ошибке обычно уже перечислены доступные варианты, например:
- `diffie-hellman-group-exchange-sha1
diffie-hellman-group14-sha1diffie-hellman-group1-sha1
Чтобы подключиться, можно временно разрешить один из предложенных методов:
ssh -o KexAlgorithms=+diffie-hellman-group-exchange-sha1 user@host
Если нужно применить настройку ко всем подключениям, добавьте в /etc/ssh/ssh_config:
KexAlgorithms +diffie-hellman-group-exchange-sha1
Если проблема только с одним хостом, лучше задать это точечно в ~/.ssh/config:
Host brokenhost.example.com KexAlgorithms +diffie-hellman-group-exchange-sha1
Ошибка no matching host key type found
Здесь сервер пытается использовать тип host key, который клиент уже не принимает. В примере из исходника это ssh-dss.
Временное решение - явно разрешить нужный тип ключа:
ssh -o HostKeyAlgorithms=+ssh-dss user@brokenhost
Глобально это можно добавить в /etc/ssh/ssh_config:
HostKeyAlgorithms +ssh-dss
Для одного хоста - в ~/.ssh/config:
Host brokenhost.example.com HostKeyAlgorithms +ssh-dss
Как диагностировать, где именно ломается SSH
Если простое включение алгоритма не помогло, нужно посмотреть, на каком шаге переговоры обрываются. Для этого подключайтесь в verbose-режиме:
ssh -v user@brokenhost
Так вы увидите, какие алгоритмы пытаются согласовать клиент и сервер, и на чём именно возникает отказ.
Еще один полезный приём - вывести все параметры, которые использует SSH-клиент:
ssh -G user@brokenhost
Это помогает понять, какие алгоритмы клиент вообще готов принять.
Что делать правильно, а не только быстро
Временное включение старых алгоритмов - это рабочий обходной путь, но не финальное решение. Если есть доступ к серверу, лучше:
- обновить OpenSSH;
- заменить
ssh-rsaна более современные ключи, напримерed25519; - обновить сетевое оборудование или его прошивку;
- убрать устаревшие SHA1-алгоритмы из конфигурации.
Если хочешь, я могу сразу превратить это в SEO-статью под блог с более сильным заголовком, meta description и FAQ-блоком.
