Когда 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-sha1
  • diffie-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-блоком.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *