HAProxy перезапускает SSH на бэкенд на основе FQDN: kex_exchange_identification: Соединение закрыто удаленным хостом.

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

Я пытаюсь перенаправить SSH-соединения с порта 122/tcp на другой сервер на порт 22/tcp на основе FQDN.

Вот моя конфигурация HAProxy :

frontend my_ssh_frontend
    bind *:122
    mode tcp
    option tcplog
    acl my_ssh_acl hdr(host) myHostname.myDomain.com
    use_backend my_ssh_backend if my_ssh_acl

backend my_ssh_backend
    mode tcp
    server myserver1 x2.y2.z2.t2:22 check

А вот вывод ssh -vvv :

 ssh.exe -p 122 -l admin-media myHostname.myDomain.com -vvv 2>&1 | egrep.exe -vw "identity file|Failed to open"
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug2: resolving "myHostname.myDomain.com" port 122
debug2: ssh_connect_direct
debug1: Подключение к myHostname.myDomain.com [x1.y1.z1.t1] порт 122.
debug1: Соединение установлено.
debug1: Локальная версия SSH-2.0-OpenSSH_for_Windows_8.1
kex_exchange_identification: Соединение закрыто удалённым хостом

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

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

Возможные причины и решения:

  1. Проблема с ACL и заголовками:
    Ваши условия в acl используют заголовок Host, который в обычных SSH-соединениях не передается, так как они работают в TCP-режиме. Поэтому вам нужно изменить способ выбора бэкенда. Мы можем убрать использование acl и просто перенаправить все запросы на бэкенд SSH. Например:

    frontend my_ssh_frontend
       bind *:122
       mode tcp
       option tcplog
       use_backend my_ssh_backend
    
    backend my_ssh_backend
       mode tcp
       server myserver1 x2.y2.z2.t2:22 check
  2. Проверка бэкенда:
    Убедитесь, что сервер, на который вы пытаетесь перенаправить соединение (x2.y2.z2.t2:22), доступен и прослушивает SSH-соединения. Используйте telnet или nc (netcat) для проверки доступности порта:

    telnet x2.y2.z2.t2 22

    Если соединение не устанавливается, возможно, проблема находится на стороне сервера бэкенда (например, фаервол или настройки SSH).

  3. Проблемы с конфигурацией SSH:
    Убедитесь, что на бэкенд-сервере правильно сконфигурирован SSH и он слушает на 22 порту. Проверьте файл /etc/ssh/sshd_config на наличие ошибок и убедитесь, что сервис SSH запущен.

    systemctl status sshd
  4. Логи и отладка:
    Проверьте логи HAProxy на предмет каких-либо сообщений об ошибках, которые могут указывать на проблему с установлением соединения. Логи SSH на сервере бэкенда также могут предоставить дополнительную информацию:

    tail -f /var/log/auth.log
  5. Тестирование:
    После изменения конфигурации HAProxy, не забудьте перезапустить HAProxy:

    sudo systemctl restart haproxy

Теперь попробуйте снова подключиться с клиента через SSH, используя ту же команду:

ssh -p 122 -l admin-media myHostname.myDomain.com -vvv

Если все сделано правильно, вы должны установить соединение с вашим бэкенд-сервером через HAProxy без ошибок.

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

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

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