1

TL; DR: почему клиент ssh для OpenSSH 6.x отправляет строку "OpenSSH_6.2p2" сразу при подключении, а клиент OpenSSH 5.x ничего не отправляет?


Я пытаюсь заставить работать SSH-туннель через HTTP/S-прокси. Я могу получить TCP-соединение, которое правильно туннелируется, используя запрос HTTP CONNECT. Он корректно работает с SSH-клиентом на моем Mac OSX 10.9, но не работает с более старым Mac под управлением более старой OSX.

Это привело к следующей странности, которую я затрудняюсь объяснить. (Это может быть глупым вопросом для кого-то, знакомого с протоколом SSH, но после небольшого поиска я не могу найти простое объяснение того, как этот протокол должен выглядеть, и я надеюсь, что не придется читать весь RFC для отладить это; таким образом, этот пост.)


На Mac OSX 10.9 с OpenSSH_6.2p2:

Терминал 1:

nc -l 127.0.0.1 5000

Терминал 2:

ssh test@127.0.0.1 -p 5000

Клемма 1 затем выводит:

OpenSSH_6.2p2

Таким образом, этот новый клиент передал эту строку при подключении.


На CentOS 6.3 с OpenSSH_5.3p1:

Команды терминала 1 и 2 точно такие же, как указано выше.

Но терминал 1 ничего не выводит. Похоже, этот старый клиент ничего не отправлял при подключении.


Само соединение TCP работает корректно из всего, что я могу сказать. Это похоже на разницу протокола. Но оба они, очевидно, используют протокол SSH "версия 2".

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

Кто-нибудь понимает, что здесь происходит? Или, может быть, знаете, где есть простое объяснение типа 1,2,3, какая сторона отправляет что за этот протокол и какая информация о различиях версий?

1 ответ1

1

Это описано здесь: https://tools.ietf.org/html/rfc4253#section-4.2

И клиент, и сервер должны отправлять свои строки версий при подключении. Однако кажется, что в более ранних версиях клиент ждет сервера перед отправкой его строки - что похоже на деталь реализации, которая технически является ошибкой (предположительно исправлена в SSH 6.x), но обычно не создает проблемы на практике ,

Если кому-то интересно, вот что я пытался решить: https://github.com/bradleypeabody/proxyman/blob/master/README.md

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .