Ошибки SSH, которая возникает в старых версиях Linux. Я получил эту ошибку при подключении к установке Centos 6.9 (Final).
- Шаг 1 — Сома ошибка при подключении
- Шаг 2 – Как исправить ошибку
- Шаг 3 — Нужно постоянное решение?
- Почему это происходит
Шаг 1 — Сома ошибка при подключении
При попытке подключиться к серверу по SSH вы получите следующую ошибку:
ssh root@93.171.60.100 Unable to negotiate with 93.171.60.100 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss # Note: This IP address no longer exists
Эта ошибка означает, что существует несоответствие между криптографическими ключами, которые готов использовать SSH-клиент (OpenSSH), и ключами, предлагаемыми сервером (CentOS 6.9).
- Ключи хоста: подключение к серверу через SSH представляет собой уникальный «ключ хоста». Мой локальный ноутбук хранит этот ключ и проверяет его при последующих подключениях, чтобы убедиться, что вы общаетесь с тем же сервером (а не со злонамеренным самозванцем — атакой «человек посередине»).
- Алгоритмы: Существуют различные криптографические алгоритмы для генерации ключей хоста. Более старые версии SSH (например, та, что используется на сервере CentOS 6.9) предлагают устаревшие или менее безопасные алгоритмы, такие как ssh-rsaи ssh-dss. Более новые клиенты отдают приоритет более сильным алгоритмам и могут отклонять соединения, если доступны только более слабые варианты.
Шаг 2 – Как исправить ошибку.
Существуют различные криптографические алгоритмы для генерации ключей хоста. Более старые версии SSH (например, та, что используется на сервере CentOS 6.9) предлагают устаревшие или менее безопасные алгоритмы, такие как ssh-rsaи ssh-dss. Более новые клиенты отдают приоритет более сильным алгоритмам и могут отклонять соединения, если доступны только более слабые варианты.
Эта команда временно отменяет поведение вашего клиента по умолчанию:
ssh -oHostKeyAlgorithms=+ssh-dss root@93.171.60.100 #Example Output #The authenticity of host '93.171.60.100 (93.171.60.100)' can't be established. #DSA key fingerprint is SHA256:TBH5kXiO1PwljvFLAduE1+ddrCRjtxESeRo8O2K+FCs. #This key is not known by any other names #Are you sure you want to continue connecting (yes/no/[fingerprint])? yes #Warning: Permanently added '93.171.60.100' (DSA) to the list of known hosts. root@93.171.60.100's password: [root@Centos ~]#
-oHostKeyAlgorithms=+ssh-dss: Сообщает вашему SSH-клиенту явно включить ssh-dss в список приемлемых алгоритмов ключей хоста. Это позволяет ему успешно взаимодействовать со старым сервером CentOS.
Шаг 3 — Нужно постоянное решение?
Если вам нужно, чтобы это исправление было постоянным, вы можете обновить файлы конфигурации ssh, чтобы всегда разрешать ssh-dss. Хотя это не всегда лучшая практика безопасности, у некоторых пользователей может не быть другого выбора, кроме как сделать это.
Конфигурация на стороне клиента (менее безопасная):
Вы можете изменить конфигурацию вашего клиента SSH (~/.ssh/config
), чтобы постоянно принимать ssh-dss
. Это самое простое решение, но важно знать, что оно немного снижает вашу безопасность.
- Изменить конфигурацию: Откройте файл конфигурации SSH (
~/.ssh/config
) в текстовом редакторе. Если он не существует, создайте его. - Добавить строки: Добавьте в файл следующие строки:
Host 93.171.60.100 # Replace with your server's IP or hostname HostKeyAlgorithms +ssh-dss
- Сохранить: Сохраните файл и выйдите. Теперь ваш клиент всегда будет использовать
ssh-dss
при подключении к этому конкретному серверу.
Конфигурация на стороне сервера (рекомендуется):
Это подразумевает обновление конфигурации SSH на вашем сервере CentOS 6.9.
- Конфигурация SSH: отредактируйте файл конфигурации демона SSH, обычно расположенный по адресу
/etc/ssh/sshd_config
. - HostKey Line: Найдите строку, начинающуюся с
HostKey
. Закомментируйте все строки, используяssh-dss
или ,ssh-rsa
и добавьте строку для более безопасного алгоритма, например:
HostKey /etc/ssh/ssh_host_rsa_key # RSA key или HostKey /etc/ssh/ssh_host_ecdsa_key # ECDSA key или HostKey /etc/ssh/ssh_host_ed25519_key # Ed25519 key
- Генерация ключей: если указанные ключи не существуют, сгенерируйте их с помощью следующих команд:
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key или ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key или ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
Перезапустите SSHD: Перезапустите демон SSH, чтобы применить изменения:
service sshd restart
Обновление CentOS (лучшее долгосрочное решение):
Если возможно, обновление вашего сервера CentOS до более новой версии (CentOS 7, 8 или 9) является лучшим долгосрочным решением. Это обеспечит:
- Безопасность:
новые версии OpenSSH с более надежными алгоритмами по умолчанию. - Техническое обслуживание:
постоянные обновления и поддержка вашей операционной системы.
Почему это происходит
Эта проблема возникает из-за сочетания следующих факторов:
- Старый сервер:
CentOS 6.9 — старый дистрибутив, и его конфигурация SSH имеет устаревшие настройки по умолчанию. - Обновления безопасности:
Ваш SSH-клиент (и современный OpenSSH в целом) со временем обновлялся, чтобы повысить приоритет безопасности. Он может отключить или сделать устаревшими старые алгоритмы, такие какssh-rsa
иssh-dss
из-за потенциальных уязвимостей.