#Как распознать проблему и где применимы действия
После обновления OpenSSH старый RSA/DSA-ключ или алгоритм подписи больше не принимается. Сначала различите алгоритм ключа пользователя и алгоритм ключа узла, затем мигрируйте на поддерживаемый ключ. Перед выполнением определите название программы, редакцию Linux и управляющий сервис. Значения примеров в командах не являются готовой конфигурацией вашего устройства.
#Возможные причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Старая подпись пользователя | В ssh -vvv видно отсутствие подходящего алгоритма для предложенного ключа | Создать новый Ed25519-ключ, если сервер поддерживает |
| Несовместим ключ сервера | Клиент пишет no matching host key type found | Обновить ключ хоста на контролируемом сервере |
| Ключ принят, но файл не авторизован | Ошибка Permission denied (publickey) без no matching | Проверить authorized_keys, настройки и журнал |
#Пошаговая диагностика и исправление
- Шаг 1. Сохраните рабочий доступПрежде чем менять ключи, оставьте открытым действующий SSH-сеанс или подготовьте консоль VPS. Не удаляйте старый ключ до успешной проверки нового и не включайте устаревшие алгоритмы глобально.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh -V
- Шаг 2. Посмотрите точный отказ при согласованииНа клиенте -vvv выводит предлагаемый алгоритм и ответы сервера. Фразы no matching host key type и no mutual signature algorithm относятся к разным этапам.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh -vvv -o ConnectTimeout=8 пользователь@server.example.org
- Шаг 3. Посмотрите тип старого публичного ключаИспользуйте путь к собственной публичной части. ssh-keygen -lf покажет длину и тип; саму закрытую часть не пересылайте. Если публичного файла нет, ищите текущие настройки IdentityFile.Linux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh-keygen -lf ~/.ssh/id_rsa.pub
- Шаг 4. Создайте новый отдельный ключНа клиенте создайте Ed25519-пару под новым именем, чтобы не перезаписать id_rsa. Подтвердите защитную фразу. Если сервер старый и не поддерживает Ed25519, потребуется его обновление или совместимая конфигурация с администратором.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)С осторожностьюТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519_updated -C 'new-ssh-key'Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Шаг 5. Добавьте публичную часть только по доверенному каналуЕсли парольный вход всё ещё работает, ssh-copy-id добавит публичную часть на сервер. Утилита может не быть установлена, тогда владелец сервера должен добавить строку .pub в authorized_keys безопасным способом.Linux · Терминал (Bash)С осторожностьюТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh-copy-id -i ~/.ssh/id_ed25519_updated.pub пользователь@server.example.orgКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Шаг 6. Проверьте именно новый ключИспользуйте IdentitiesOnly=yes, чтобы клиент не перебирал другие ключи ssh-agent. Новый вход должен пройти без ослабления PubkeyAcceptedAlgorithms; если не прошёл, вернитесь к серверному журналу.
- Терминал Linux на сервере/клиенте, указанном в шагеLinux · Терминал (Bash)КомандаТерминал Linux на сервере/клиенте, указанном в шаге. Обычно достаточно прав пользователя; имя.service, пути, адрес server.example.org, имена пользователей и другие демонстрационные значения необходимо заменить фактическими. После команды сравните результат с описанием шага; при ошибке остановитесь и выясните её причину.
ssh -i ~/.ssh/id_ed25519_updated -o IdentitiesOnly=yes пользователь@server.example.org
#Как проверить, что проблема действительно устранена
После успешного входа проверьте работу SFTP/команд под своей учётной записью. Старый ключ удаляйте из authorized_keys только после нескольких успешных проверок и подтверждения, что его не используют автоматические задания.
#Если результат не получен
Вернитесь к самому раннему отличающемуся результату диагностики и проверьте точный текст ошибки, текущую загрузку и фактическую версию программы. Не повторяйте опасную команду с другими правами наугад. Если это рабочий сервер, передайте администратору обезличенные отрывки журнала за момент сбоя и уже выполненные действия.