Имеет ли значение порядок обмена версиями протокола SSH?

Я понимаю, что сервер отправит свою версию SSH, и клиент сделает то же самое. Мне интересно, имеет ли значение порядок.

Кроме того, мне интересно, могу ли я заставить SSH-сервер получать версию SSH от клиента перед отправкой своей собственной версии?

Для тех, кто проголосовал за закрытие: задавать протокольные вопросы, кажется, вполне в рамках SO. Но, независимо от целесообразности, голосование за закрытие без объяснения причин затрудняет оценку вашего суждения. И делать это новому участнику не очень приветливо. Пожалуйста, будьте более прозрачными.

Jan Nielsen 21.12.2020 07:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
598
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете Wireshark подключить SSH и увидеть связь на уровне TCP. Клиент SSH сначала отправит свою версию протокола перед сервером.

Я не думаю, что у вас есть возможность изменить порядок общения. С моим SSH-клиентом (OpenSSH_8.1p1, LibreSSL 2.7.3) я мог видеть, что после выполнения SYN-ACK сервер ожидает, пока SSH-клиент отправит поддерживаемую версию протокола.

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

Хотя вы не можете изменить объявление номера версии протокола, вы можете, в зависимости от версии, отправленной клиентом, предлагать различные алгоритмы. Например, некоторые версии OpenSSH неправильно реализованы [email protected], поэтому сервер, который знает об этом, может решить не предлагать этот алгоритм сломанной версии OpenSSH. Точно так же клиент может объявить серверу различные алгоритмы на основе объявления версии сервера.

RFC-4353 говорит, что «обе стороны ДОЛЖНЫ отправить строку идентификации», но не определяет порядок. Вполне вероятно, что клиент отправит свою идентификационную строку сразу после того, как TCP-соединение будет принято сервером, и сервер ответит своей идентификационной строкой... но, похоже, это детали реализации, не указанные в RFC. Мы смотрим на один и тот же RFC?
Jan Nielsen 21.12.2020 06:59

Протокол имеет значение, если какая-либо из сторон использует взлом SSH-1.99, как указано в §5.1, потому что клиент должен объявить правильный протокол и/или не отправлять дополнительные данные. Я согласен, что это не требуется, если вы не используете этот формат и используете только SSH 2.0.

bk2204 22.12.2020 01:02

Это хороший и важный момент, @bk2204.

Jan Nielsen 22.12.2020 16:20
Ответ принят как подходящий

Порядок обмена версиями протокола SSH не указан; он говорит:

Когда соединение установлено, обе стороны ДОЛЖНЫ отправить идентификационная строка. Эта идентификационная строка ДОЛЖНА быть

SSH-protoversion-softwareversion SP комментарии CR LF

RFC, вероятно, ничего не говорит о порядке обмена версиями протокола, потому что, фактически, это гонка, и порядок не должен иметь значения. Когда TCP-соединение клиента принимается сервером, клиент и сервер отправляют информацию о своей версии... кто первым доберется до другого, зависит только от скорости, трафика и т. д.

Как клиент, вы не можете (или не должны иметь возможности...) "заставить" сервер ждать; вполне возможно, что конкретная реализация сервера ожидает клиента перед отправкой собственной информации, но это деталь реализации сервера.

Другие вопросы по теме