Вопрос или проблема
Я пытаюсь перенаправить 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 и устранить эту проблему.
Возможные причины и решения:
-
Проблема с 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
-
Проверка бэкенда:
Убедитесь, что сервер, на который вы пытаетесь перенаправить соединение (x2.y2.z2.t2:22), доступен и прослушивает SSH-соединения. Используйтеtelnet
илиnc
(netcat) для проверки доступности порта:telnet x2.y2.z2.t2 22
Если соединение не устанавливается, возможно, проблема находится на стороне сервера бэкенда (например, фаервол или настройки SSH).
-
Проблемы с конфигурацией SSH:
Убедитесь, что на бэкенд-сервере правильно сконфигурирован SSH и он слушает на 22 порту. Проверьте файл/etc/ssh/sshd_config
на наличие ошибок и убедитесь, что сервис SSH запущен.systemctl status sshd
-
Логи и отладка:
Проверьте логи HAProxy на предмет каких-либо сообщений об ошибках, которые могут указывать на проблему с установлением соединения. Логи SSH на сервере бэкенда также могут предоставить дополнительную информацию:tail -f /var/log/auth.log
-
Тестирование:
После изменения конфигурации HAProxy, не забудьте перезапустить HAProxy:sudo systemctl restart haproxy
Теперь попробуйте снова подключиться с клиента через SSH, используя ту же команду:
ssh -p 122 -l admin-media myHostname.myDomain.com -vvv
Если все сделано правильно, вы должны установить соединение с вашим бэкенд-сервером через HAProxy без ошибок.
Если после всех этих шагов проблема все еще актуальна, сообщите о любых дополнительных сообщениях или журналах, которые могут помочь в дальнейшем диагностировании.