Продолжительная проблема с kex_exchange_identification: Соединение закрыто удаленным хостом.

Вопрос или проблема

Я недавно настроил сервер Ubuntu на старом Dell Optiplex. Я могу подключиться удаленно через ssh, находясь в одной сети. Однако, когда я пытаюсь подключиться по ssh из другой сети, используя публичный IP, я получаю следующую ошибку:

kex_exchange_identification: Connection closed by remote host

Я искал эту ошибку на этом форуме, а также на многих других, и попробовал множество способов ее исправить, но ничего не сработало. Я перенаправил порт на статический IP сервера, разрешил OpenSSH и открыл порт 22 на своем сервере через UFW, и я настроил VPN, который соединяет мой компьютер с моей сетью. Ничто из этого пока не сработало.

Что я делаю не так? Если у кого-то есть другие идеи, которые я мог бы попробовать, или что-то, что мне стоит проверить вчетверо, было бы замечательно. Большое спасибо.

Я столкнулся с аналогичной ситуацией с маленьким компьютером, который у меня стоит на столе. Что я сделал для отладки проблемы, так это запустил sshd -t, который запускает демон sshd в режиме отладки. Эта команда сообщила, что права на мои ключи были неверными. Все, что мне нужно было сделать, это зайти в папку, где хранятся ключи, и выполнить chmod 0600 <your_ssh_keys>. Возможно, ваше действие также сгенерировало вещи с неправильными правами.

Извините, что мне приходится отправлять ответ, потому что я пока не могу комментировать, так как у меня недостаточно репутации.

Похоже, нам нужно сделать немного больше отладки, чтобы правильно ответить на этот вопрос, но вы упоминаете UFW, поэтому я задумываюсь, не неправильно ли это сконфигурировано.

Также есть вероятность, что ваши конфигурации /etc/hosts.allow и /etc/hosts.deny неправильно настроены.

Кроме того, вы используете аутентификацию по паролю или аутентификацию с помощью публичного ключа? Я спрашиваю об этом, потому что даже если вы используете аутентификацию по паролю, клиент ssh все равно будет отправлять ваши ключи host-id во время фазы подключения, что сервер ssh может считать ошибкой аутентификации (в некоторых конфигурациях), и это означает, что вы не дойдете до того момента, когда вам нужно ввести пароль. Это можно исправить, используя следующее:

ssh -o PubkeyAuthentication=No -o PreferredAuthentications=Password <username>@<your server IP>

Если вы можете предоставить вывод от:

UFW с:

sudo ufw status

Проверьте записи в ваших файлах /etc/hosts.*.

Также предоставьте отладочный вывод при попытке аутентификации, добавив флаг -v, например:

ssh -v -i <ssh_privkey> <username>@<your server IP>

Надеюсь, мы сможем разобраться с этой проблемой.

Ответ или решение

Решение проблемы "kex_exchange_identification: Connection closed by remote host"

Когда вы сталкиваетесь с ошибкой kex_exchange_identification: Connection closed by remote host при попытке подключиться к Ubuntu серверу через SSH, находясь за пределами своей локальной сети, необходимо обратить внимание на несколько ключевых аспектов настройки вашего сервера и сетевого окружения. Давайте разобьем вашу ситуацию на логические шаги и предложим решения.

1. Подтверждение сетевых настроек

Первый шаг — убедиться, что ваш сервер доступен извне. Для этого выполните следующие проверки:

  • Проверка портов: Убедитесь, что порт 22, используемый для SSH, действительно открыт на вашем сервере. Вы уже упомянули, что вы настроили переадресацию портов. Проверьте настройки вашего роутера и убедитесь, что они корректны. Попробуйте использовать команды nmap или telnet из удаленной сети для проверки доступности порта:

    nmap -p 22 <ваш_публичный_IP>

    или

    telnet <ваш_публичный_IP> 22
  • Настройка UFW: Проверьте правила файервола UFW:

    sudo ufw status

    Убедитесь, что SSH доступен. Например, вы можете разрешить SSH через UFW командой:

    sudo ufw allow 22/tcp

2. Анализ конфигурации SSH

Конфигурационные файлы

Проверьте файлы /etc/hosts.allow и /etc/hosts.deny, чтобы убедиться, что нет правил, блокирующих доступ к вашему серверу.


Пример конфигурации:

# /etc/hosts.allow
sshd: ALL
# /etc/hosts.deny
sshd: ALL

Вы можете разрешить доступ всем, либо настроить его более ограниченно, в зависимости от ваших требований по безопасности.

Алгоритмы аутентификации

Проанализируйте, какой метод аутентификации вы используете: пароль или публичный ключ. Попробуйте следующую команду для временного отключения аутентификации по ключу:

ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password <username>@<ваш сервер IP>

3. Использование диагностических команд

Запустите SSH-сервер в режиме отладки, чтобы выявить возможные ошибки или проблемы с конфигурацией:

sudo sshd -t

Если будут указаны проблемы с правами доступа ключей, отрегулируйте права следующим образом:

chmod 0600 <ваши_SSH_ключи>

Также попробуйте подключиться с дополнительными параметрами для получения отладочной информации:

ssh -v -i <ssh_privkey> <username>@<ваш сервер IP>

Эта команда поможет выявить на каком этапе происходит сбой при установлении соединения.

Заключение

Ошибка kex_exchange_identification: Connection closed by remote host может иметь множество причин. Проведение диагностики с помощью указанных шагов и команд поможет вам локализовать проблему. Подключение работает в локальной сети, следовательно, выявление частной сетевой конфигурации и возможных проблем с маршрутизацией или правилами файервола за пределами локальной сети является ключевым.

Не стесняйтесь делиться результатами команд и выводами, если потребуется дополнительная помощь. Надеюсь, эти рекомендации помогут вам успешно подключиться к вашему Ubuntu серверу.

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

Капча загружается...