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, какая сторона отправляет что за этот протокол и какая информация о различиях версий?