Алгоритм подключения к серверу

Клиент считывает параметры из конфигурационного файла:
~/.ssh/config (может отсутствовать)
/etc/ssh/ssh_config

ТРАНСПОРТ

Клиент подключается к серверу.

Клиент и сервер представляются друг другу
- Cервер отсылает клиенту свой идентификатор (RFC 4253 4.2)
- Клиент отсылает серверу свой идентификатор (RFC 4253 4.2)

Согласование применяемых алгоритмов обмена ключами, открытых ключей, шифрования, сжатия и хеширования.
- Клиент отправляет серверу SSH_MSG_KEXINIT с перечислением предпочитаемых алгоритмов
- Сервер отправляет клиенту SSH_MSG_KEXINIT с перечислением предпочитаемых алгоритмов

Вычисление общего секретного ключа, хеша обмена и идентификатора сессии.
- Клиент запрапрашивает у сервера группу DH SSH_MSG_KEX_DH_GEX_REQUEST
- Сервер берёт значения p и g из подходящего модуля с группой DH в файле /etc/ssh/moduli
- Сервер передаёт клиенту простое число p и генератор g SSH_MSG_KEX_DH_GEX_GROUP
- Клиент вычисляет значение e
- Клиент отправляет на сервер значение e в пакете SSH_MSG_KEXDH_INIT
- Сервер вычисляет значение f
- Сервер вычисляет значение хеша обменаH (первый H является идентификатором сессии)
- Сервер подписывает H получая подпись хеша обмена S = Sign(H, SKs)
- Сервер отправляет клиенту f, открытый ключ хоста PKs и S в пакете SSH_MSG_KEXDH_REPLY

Клиент проверяет ключ хоста сервера
- Клиент ищет в файле ~/.ssh/known_hosts (если он есть) строку, содержащую имя и ключ хоста и сравнивает ключ из файла с тем что прислал сервер

Клиент и сервер вычисляют общий секретный ключ и создают сессионные ключи для алгоритмов

Клиент и сервер информирую друг друга о завершении стадии обмена ключами отсылая пакет SSH_MSG_NEWKEYS.

С этого момента все пакеты шифруются

Запрос сервиса
Клиент запрашивает у сервера сервис отсылая сообщение SSH_MSG_SERVICE_REQUEST
Сервер поддерживает запрошенный сервис? ДА:НЕТ
Сервер отправляет сообщение SSH_MSG_SERVICE_ACCEPT

АУТЕНТИФИКАЦИЯ

Клиент запрашивает аутентификацию (SSH_MSG_USERAUTH_REQUEST, 50)
Сервер: - отклоняет запрос аутентификации (SSH_MSG_USERAUTH_FAILURE, 51)
или
- аутентифицирует пользователя запрошенным методом
- подтверждает успешную аутентификацию (SSH_MSG_USERAUTH_SUCCESS, 52)

Поддержите проект, если он помог вам

Проект продвигается за счёт личных средств и времени авторского коллектива. Если вы нашли здесь то, что искали, то вы можете выразить свою благодарность финансово. Даже небольшой платёж помогает авторам в их труде, сохраняя их вовлечённость и высокую мотивацию чтобы строить открытый мир равных возможностей для всех неравнодушных людей вокруг.