Алгоритм подключения к серверу
Клиент считывает параметры из конфигурационного файла:~/.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)