Алгоритм установления соединения в протоколе SSH.
Алгоритм установления соединения в протоколе SSH. • Алгоритм протокола SSH можно разделить на три уровня, каждый из которых располагается над предыдущим: транспорт (открытие защищённого канала), аутентификация, подключение. Для целостности картины добавим сюда уровень установки сетевого соединения, хотя официально этот уровень находится ниже SSH. • Установка TCP-соединения: на этом этапе происходит сетевое подключение клиента к серверу на TCP-порт, указанный в опции Port (по умолчанию: 22) в файле конфигурации сервера /etc/ssh/sshd_config • Открытие защищенного канала: - Обмен идентификационными данными: после установки TCP-соединения, клиент и сервер обмениваются версиями SSH-протокола и другими вспомогательными данными, необходимыми для выяснения совместимости протоколов и для выбора алгоритмов работы. - Выбор алгоритмов (обмена ключами, шифрования, сжатия и т.п.): на этом шаге стороны отсылают друг другу списки поддерживаемых алгоритмов, наибольший приоритет имеют алгоритмы в начале каждого списка. Затем сравнивают алгоритмы в полученных списках с алгоритмами, имеющимися в системе, и выбирают первый совпавший в каждом списке. Список доступных алгоритмов обмена ключами на стороне клиента (используются для получения сессионного ключа) можно посмотреть командой: ssh -Q kex - Получение сессионного ключа шифрования: Процесс получения сессионного ключа может отличаться в зависимости от версии алгоритма, но в общих чертах сводится к следующему: Сервер отсылает клиенту свой ключ (DSA, RSA или т.п.), если клиент производит соединение с данным сервером впервые, то пользователю будет задан вопрос о доверии ключу сервера. Если же соединение с данным сервером уже устанавливалось ранее, то клиент сравнивает присланный ключ с ключом, записанным в /home/username/.ssh/known_hosts. Если ключи не совпадают, то пользователь получит предупреждение о возможной попытке взлома. Как только клиент определился с доверием к ключу сервера, с помощью одной из реализаций алгоритма Диффи-Хеллмана клиент и сервер генерируют сеансовый ключ, который будет использоваться для симметричного шифрования канала. • Аутентификация клиента: только теперь, когда клиент и сервер установили канал для зашифрованной передачи данных, они могут произвести аутентификацию по паролю или ключам. - В общих чертах, аутентификация посредством ключей происходит следующим образом: клиент отсылает серверу имя пользователя и свой публичный ключ. Сервер проверяет в файле /home/username/.ssh/authorized_keys наличие присланного клиентом открытого ключа. Если открытый ключ найден, то сервер генерирует случайное число и шифрует его открытым ключом клиента, после чего результат отправляется клиенту. Клиент расшифровывает сообщение своим приватным ключом и отправляет результат серверу. Сервер проверяет полученный результат на совпадение с тем числом, которое он изначально зашифровал открытым ключом клиента, и в случае совпадения считает аутентификацию успешной. • Уровень подключения: после проведения всех вышеперечисленных процедур, пользователь получает возможность передавать команды серверу или копировать файлы. #SSH