Алгоритм установления соединения в протоколе SSH / Хабр

(Начальное название статьи «Алгоритм работы протокола SSH» было изменено по рекомендациям Vindicar, Karroplan и других участников хабросообщества)

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

Попытаюсь внести немного ясности в работу протокола SSH, а заодно рассмотреть роль алгоритма RSA и ключей авторизации пользователя…



Алгоритм протокола SSH можно разделить на три уровня, каждый из которых располагается над предыдущим: транспорт (открытие защищённого канала), аутентификация, подключение.

Для целостности картины я также добавлю уровень установки сетевого соединения, хотя официально этот уровень находится ниже SSH.

1. Установка TCP-соединения
Не буду подробно останавливаться на принципе работы стека TCP/IP, так как эта тема достаточно хорошо задокументирована в Рунете. При необходимости вы легко найдёте информацию.

На этом этапе происходит сетевое подключение клиента к серверу на TCP-порт, указанный в опции Port (по умолчанию: 22) в файле конфигурации сервера /etc/ssh/sshd_config.

2. Открытие защищенного канала
2.1 Обмен идентификационными данными

После установки TCP-соединения, клиент и сервер (далее по тексту – стороны) обмениваются версиями SSH-протокола и другими вспомогательными данными, необходимыми для выяснения совместимости протоколов и для выбора алгоритмов работы.

2.2 Выбор алгоритмов: обмена ключами, шифрования, сжатия и т.п.

При работе SSH используется довольно много алгоритмов, одни из них используются для шифрования, вторые для обмена ключами, третьи для сжатия передаваемых данных и т. п. На этом шаге стороны отсылают друг другу списки поддерживаемых алгоритмов, наибольший приоритет имеют алгоритмы в начале каждого списка. Затем сравнивают алгоритмы в полученных списках с алгоритмами, имеющимися в системе, и выбирают первый совпавший в каждом списке.

Список доступных алгоритмов обмена ключами на стороне клиента (используются для получения сессионного ключа) можно посмотреть командой:

ssh -Q kex
Список доступных в системе симметричных алгоритмов (используются для шифрования канала):

ssh -Q cipher
Список типов ключей для авторизации у клиента:

ssh -Q key-cert
Дополнено по замечанию onix74:
Все используемые в публикации команды актуальны для версии OpenSSH 7.6 из Ubuntu 18.04 LTS.

2.3 Получение сессионного ключа шифрования

Процесс получения сессионного ключа может отличаться в зависимости от версии алгоритма, но в общих чертах сводится к следующему:

Сеансовый ключ создается исключительно на период жизни канала и уничтожается при закрытии соединения.

3. Аутентификация клиента
И только теперь, когда клиент и сервер установили канал для зашифрованной передачи данных, они могут произвести аутентификацию по паролю или ключам.

В общих чертах, аутентификация посредством ключей происходит следующим образом:

  • Клиент отсылает серверу имя пользователя (username) и свой публичный ключ.
  • Сервер проверяет в файле /home/username/.ssh/authorized_keys наличие присланного клиентом открытого ключа. Если открытый ключ найден, то сервер генерирует случайное число и шифрует его открытым ключом клиента, после чего результат отправляется клиенту.
  • Клиент расшифровывает сообщение своим приватным ключом и отправляет результат серверу.
  • Сервер проверяет полученный результат на совпадение с тем числом, которое он изначально зашифровал открытым ключом клиента, и в случае совпадения считает аутентификацию успешной.

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

На этом уровне обеспечивается: мультиплицирование каналов (возможность работы множества каналов к одному серверу за счет объединения их в один канал), туннелирование и т.п.

От теории к практике

Ну а теперь, думаю, у читателей назрел вполне закономерный вопрос: а зачем нужно знать все эти тонкости работы SSH-протокола, если для повседневной работы достаточно знаний команд создания ключей (ssh-keygen), открытия терминальной сессии (ssh), передачи файлов (scp)?

В качестве ответа, можно вспомнить тему о смене стандартного порта SSH на какой-то другой, которая постоянно становится причиной холивара на Хабре…

В собственной практике я не припомню ни одного смотрящего во внешнюю сеть сервера, который бы ежедневно не подвергался долбёжке на 22-й порт. В ситуации, если SSH у вас работает на стандартном порту (и ничем дополнительно не защищён), даже если аутентификация исключительно по ключам и никакие подборы паролей не пугают, то по причине постоянно валящихся запросов от недобросовестных клиентов сервер всё равно вынужден совершать массу бесполезной работы: устанавливать TCP-соединение, выбирать алгоритмы, генерировать сессионный ключ, отправлять запросы аутентификации, писать лог-файл.

В ситуации же, когда на 22-м порту ничего нет, или порт защищён с помощью iptables (либо надстройками над ним типа fail2ban), то злоумышленник будет дропнут ещё на этапе установки TCP-соединения.

Наиболее интересно описанное выглядит в виде таблицы*

Конфигурация Вероятность взлома Потери от флуда**
22 порт,
авторизация по паролю,
без защиты
высокая высокие
22 порт,
авторизация по ключам,
без защиты
средняя*** высокие
22 порт,
авторизация по ключам,
защита на основе ограничения неудачных попыток авторизации
низкая средние****
Нестандартный порт,
авторизация по паролю,
без защиты
высокая низкие
Нестандартный порт,
авторизация по ключам,
без защиты
средняя*** низкие
Нестандартный порт,
авторизация по ключам,
защита на основе ограничения неудачных попыток авторизации
низкая низкие
* — значения параметров (высокий, средний, низкий) носят относительный характер и служат только для сравнения показателей.

** — имеется ввиду расход ресурсов сервера (процессор, диск, сетевой канал и т.п.) на обработку лавины запросов, обычно идущих на 22-й порт.
*** — произвести взлом, если для авторизации используются RSA-ключи, очень сложно, однако неограниченное количество попыток авторизации делает это возможным.
**** — количество попыток авторизации ограничено, но серверу всё равно приходится обрабатывать их от большого количества злоумышленников.

Дополнительные материалы


  • Исходники SSH
  • Спецификации протокола SSH (en)
  • Алгоритм Диффи-Хелмана
  • Алгоритм RSA
  • Как SSH появился на 22 порту
  • Что записано в файле .ssh/known_hosts
  • Памятка пользователям ssh

Основные принципы работы протокола SSH

В этой статье мы рассмотрим, как работает SSH, как он используется для безопасной связи с удалёнными компьютерами и как компьютеры устанавливают и настраивают сеанс.

Что такое SSH?

SSH — сокращение от «secure shell» (безопасная оболочка). Это протокол, который чаще всего используют для управления удалёнными компьютерами по сети.

Как устанавливается сессия SSH?

Есть несколько шагов, которые нужно пройти, чтобы начать SSH-сеанс между компьютерами.

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

После этих трёх шагов мы можем безопасно общаться с удалённым компьютером, делиться секретными данными, а также проверить, есть ли у клиента разрешение на доступ к хосту. Каждый из разделов ниже будет более подробно описывать эти действия.

Настройка зашифрованного канала

Вся информация, отправляемая с использованием SSH, зашифрована. Обе стороны должны знать и понимать способ шифрования.

Для шифрования передаваемых данных используется симметричное шифрование. Суть данного подхода заключается в том, что оба компьютера имеют одинаковый ключ шифрования, который называется «симметричный ключ». Симметричное шифрование работает очень хорошо, но только до тех пор, пока сторонние не имеют доступа к ключу.

Один компьютер может создать ключ и отправить в виде сообщения через интернет. Но сообщение ещё не будет зашифровано, поэтому любой, кто перехватит его, сразу же сможет расшифровать все следующие сообщения.

Решение этой проблемы состоит в использовании протокола обмена ключами Диффи-Хеллмана. Оба компьютера создают свой закрытый и открытый ключ. Вместе они образуют пару ключей. Компьютеры делятся своими открытыми ключами друг с другом через интернет. Используя свой закрытый и чужой открытый ключ, стороны могут независимо сгенерировать одинаковый симметричный ключ.

Верификация

Следующий этап процесса установки сеанса SSH заключается в проверке того, что данные не были подделаны во время их передачи и что другой компьютер действительно является тем, за кого себя выдаёт.

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

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

После того как клиент и хост сгенерировали свои симметричные ключи, клиент использует хеш-функцию для генерации HMAC, что означает «код аутентификации сообщений, использующий хеширование». Клиент отправит этот HMAC на сервер для верификации.

Функция хеширования использует:

  • симметричный ключ клиента,
  • порядковый номер пакета,
  • содержимое сообщения (зашифрованное).

Когда хост получает HMAC, он может использовать ту же самую хеш-функцию с этими тремя компонентами:

  • собственный (идентичный клиентскому) симметричный ключ;
  • порядковый номер пакета;
  • зашифрованное сообщение.

Если сформированный хеш совпадает с HMAC, полученным от клиента, то мы можем быть уверены, что подключаемый компьютер — это компьютер с симметричным ключом, потому что только хост и клиент знают симметричный ключ, а другие компьютеры — нет.

Прелесть этого подхода в том, что мы не просто проверили личность клиента и убедились, что данные не были подделаны, но мы сделали это без передачи какой-либо секретной информации.

Аутентификация

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

Многие используют аутентификацию по паролю. Клиент отправляет хосту зашифрованное сообщение, содержащее пароль. Хост его расшифровывает и ищет пароль в базе данных, чтобы удостовериться, есть ли у клиента разрешение на доступ. Использование пароля для аутентификации допустимо, но имеет свои недостатки, так как необходимо хранить все пароли на сервере.

Более безопасной является аутентификация по сертификату. Сформировав сертификат, клиент единожды вводит пароль для доступа к серверу и отправляет ему открытую часть сертификата. В дальнейшем ввод пароля не требуется. Этот подход считается более безопасным, чем просто использование пароля, поскольку не подразумевает хранение секрета пользователя на хосте.

Заключение

SSH — это важный инструмент, используемый для удалённого управления другими компьютерами. Он безопасен, поскольку оба компьютера могут шифровать и дешифровать сообщения с использованием симметричных ключей.

Перевод статьи «A top-down introduction to SSH and how it enables secure data-sharing»

Варвара Николаева

Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.

Подробнее

Реклама на tproger.ru

Загрузка

Что такое SSH, шифрование и порты

СШ

03 марта 2023 г.

Домантас Г.

8 минут Прочитано

Вы, наверное, уже слышали о SSH, так как это часто используемый интернет-жаргон, когда речь идет о чем-либо, связанном с кибербезопасностью. Однако вы можете быть ошеломлены, когда узнаете, что это такое и как вообще работает SSH.

В этом руководстве мы рассмотрим основы SSH, а также основные механизмы, используемые протоколом для обеспечения безопасного метода удаленного доступа. Мы рассмотрим различные уровни и типы используемого шифрования, а также назначение каждого уровня.

Давайте сразу нырнем, хорошо?

Загрузить шпаргалку Ultimate SSH Commands

Что такое SSH

SSH, или протокол Secure Shell, — это протокол удаленного администрирования, который позволяет пользователям получать доступ, контролировать и изменять свои удаленные серверы через Интернет.

Служба SSH была создана как безопасная замена незашифрованному Telnet и использует криптографические методы для обеспечения того, чтобы вся связь с удаленным сервером происходила в зашифрованном виде. Он предоставляет механизм для аутентификации удаленного пользователя, передачи входных данных от клиента к хосту и ретрансляции вывода обратно клиенту.

В приведенном ниже примере показано типичное приглашение SSH. Любой пользователь Linux или macOS может подключиться по SSH к своему удаленному серверу прямо из окна терминала. Пользователи Windows могут воспользоваться преимуществами SSH-клиентов, таких как Putty. Вы можете выполнять команды оболочки так же, как если бы вы физически управляли удаленным компьютером.

Как работает SSH

Если вы используете Linux или Mac, использовать SSH очень просто. Если вы используете Windows, вам нужно будет использовать SSH-клиент для открытия SSH-соединений. Самый популярный SSH-клиент — PuTTY, о котором вы можете узнать больше здесь.

Для пользователей Mac и Linux перейдите в программу терминала и выполните следующую процедуру:

Команда SSH состоит из 3 отдельных частей:

 ssh {пользователь}@{хост} 

Команда ключа SSH указывает вашей системе, что вы хотите открыть зашифрованное соединение Secure Shell. {user} представляет учетную запись, к которой вы хотите получить доступ. Например, вы можете захотеть получить доступ к пользователю root , который в основном является синонимом системного администратора с полными правами на изменение чего-либо в системе. {хост} относится к компьютеру, к которому вы хотите получить доступ. Это может быть IP-адрес (например, 244.235.23.19) или доменное имя (например, www.xyzdomain.com).

Когда вы нажмете Enter, вам будет предложено ввести пароль для запрошенной учетной записи. Когда вы его вводите, на экране ничего не появляется, но ваш пароль фактически передается. Когда вы закончите печатать, снова нажмите Enter. Если ваш пароль правильный, вас встретит окно удаленного терминала.

Если вы хотите узнать о других командах SSH, найдите их здесь.

Понимание различных методов шифрования

Существенным преимуществом SSH по сравнению с его предшественниками является использование шифрования для обеспечения безопасной передачи информации между хостом и клиентом. Хост относится к удаленному серверу, к которому вы пытаетесь получить доступ, а клиент — это компьютер, который вы используете для доступа к хосту. SSH использует три различных технологии шифрования:

  1. Симметричное шифрование
  2. Асимметричное шифрование
  3. Хэширование

Симметричное шифрование

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

Симметричное шифрование часто называют общим ключом или общий секрет шифрование. Обычно используется только один ключ, а иногда и пара ключей, где один ключ можно легко вычислить с помощью другого ключа.

Симметричные ключи используются для шифрования всей связи во время сеанса SSH. И клиент, и сервер получают секретный ключ, используя согласованный метод, и полученный ключ никогда не раскрывается третьим лицам.

Процесс создания симметричного ключа осуществляется по алгоритму обмена ключами . Что делает этот алгоритм особенно безопасным, так это тот факт, что ключ никогда не передается между клиентом и хостом.

Вместо этого два компьютера совместно используют общедоступные фрагменты данных, а затем манипулируют ими для независимого вычисления секретного ключа. Даже если другая машина перехватит общедоступные данные, она не сможет вычислить ключ, поскольку алгоритм обмена ключами неизвестен.

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

Существует множество симметричных шифровальных шифров, включая, помимо прочего, AES (Advanced Encryption Standard) , CAST128 , Blowfish и т. д. Перед установкой защищенного соединения клиент и хост решают, какой шифр использовать. использовать, опубликовав список поддерживаемых шифров в порядке предпочтения. В качестве двунаправленного шифра используется наиболее предпочтительный шифр из поддерживаемых клиентами шифров, присутствующий в списке хоста.

Например, если две машины Ubuntu 14.04 LTS взаимодействуют друг с другом через SSH, они будут использовать aes128-ctr в качестве шифра по умолчанию.

Асимметричное шифрование

В отличие от симметричного шифрования, асимметричное шифрование использует два отдельных ключа для шифрования и дешифрования. Эти два ключа известны как открытый ключ и закрытый ключ . Вместе оба этих ключа образуют пару открытый-секретный ключ .

Любой человек может использовать открытый ключ для шифрования сообщения, а расшифровать его может только тот получатель, у которого есть свой закрытый ключ, и наоборот. Они состоят из обширных и, казалось бы, случайных комбинаций чисел и символов, однако как открытые, так и закрытые ключи объединяются в пары с использованием сложных математических алгоритмов.

Например, для аутентификации отправителя сообщение шифруется с использованием его собственного закрытого ключа. Следовательно, сообщение может быть расшифровано только с использованием открытого ключа этого конкретного отправителя. Обратите внимание, что механизмы шифрования и дешифрования являются автоматическими процессами — вам не нужно ничего делать вручную.

Вопреки распространенному мнению, асимметричное шифрование не используется для шифрования всего сеанса SSH. Вместо этого он используется во время алгоритма обмена ключами симметричного шифрования. Перед инициированием защищенного соединения обе стороны генерируют временные пары открытого и закрытого ключей и делятся своими соответствующими закрытыми ключами для создания общего секретного ключа.

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

Хеширование

Одностороннее хеширование — еще одна форма криптографии, используемая в Secure Shell Connections. Функции одностороннего хеширования отличаются от двух вышеупомянутых форм шифрования тем, что они никогда не предназначены для расшифровки. Они генерируют уникальное значение фиксированной длины для каждого входа, который не показывает четкой тенденции, которую можно использовать. Это делает их практически необратимыми.

Легко сгенерировать криптографический хэш из заданного ввода, но невозможно сгенерировать ввод из хэша. Это означает, что если клиент имеет правильный ввод, он может сгенерировать криптографический хэш и сравнить его значение, чтобы проверить, есть ли у него правильный ввод.

SSH использует хэши для проверки подлинности сообщений. Это делается с помощью HMAC или H на основе ясеня M essage A аутентификации C оды. Это гарантирует, что полученная команда не будет изменена каким-либо образом.

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

Каждое передаваемое сообщение должно содержать MAC-адрес, который рассчитывается с использованием симметричного ключа, порядкового номера пакета и содержимого сообщения. Он отправляется за пределы симметрично зашифрованных данных в качестве заключительного раздела коммуникационного пакета.

Как работает SSH с этими методами шифрования

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

По умолчанию SSH работает на TCP-порту 22 (хотя при необходимости порт SSH можно изменить). Хост (сервер) прослушивает порт 22 (или любой другой порт, назначенный SSH) для входящих подключений. Он организует безопасное соединение, аутентифицируя клиента и открывая правильную оболочку, если проверка прошла успешно.

Клиент должен начать соединение SSH, инициировав TCP-квитирование с сервером, обеспечив безопасное симметричное соединение, проверив, соответствует ли идентификатор, отображаемый сервером, предыдущим записям (обычно записанным в файле хранилища ключей RSA) и предоставив необходимые учетные данные пользователя для аутентификации соединения.

Существует два этапа установления соединения: во-первых, обе системы должны согласовать стандарты шифрования для защиты будущих коммуникаций, а во-вторых, пользователь должен аутентифицировать себя. Если учетные данные совпадают, пользователю предоставляется доступ по SSH.

Согласование сеанса шифрования

Когда клиент пытается подключиться к серверу через TCP, сервер представляет протоколы шифрования и соответствующие версии, которые он поддерживает. Если у клиента есть аналогичная совпадающая пара протокола и версии, достигается соглашение и устанавливается соединение с принятым протоколом. Сервер также использует асимметричный открытый ключ, который клиент может использовать для проверки подлинности хоста.

Как только это установлено, обе стороны используют так называемый алгоритм обмена ключами Диффи-Хеллмана для создания симметричного ключа. Этот алгоритм позволяет и клиенту, и серверу получить общий ключ шифрования, который в дальнейшем будет использоваться для шифрования всего сеанса связи.

Вот как работает алгоритм на самом базовом уровне:

  1. И клиент, и сервер соглашаются на очень большое простое число, которое, конечно, не имеет общего множителя. Это значение простого числа также известно как начальное значение .
  2. Затем обе стороны договариваются об общем механизме шифрования для создания другого набора значений путем манипулирования начальными значениями определенным алгоритмическим способом. Эти механизмы, также известные как генераторы шифрования, выполняют большие операции с начальным числом. Примером такого генератора является AES (Advanced Encryption Standard).
  3. Обе стороны независимо генерируют другое простое число. Это используется в качестве секретного закрытого ключа для взаимодействия.
  4. Этот вновь сгенерированный закрытый ключ с общим номером и алгоритмом шифрования (например, AES) используется для вычисления открытого ключа, который распространяется на другой компьютер.
  5. Затем стороны используют свой личный закрытый ключ, общий открытый ключ другой машины и исходное простое число для создания окончательного общего ключа. Этот ключ вычисляется обоими компьютерами независимо, но для обеих сторон создается один и тот же ключ шифрования.
  6. Теперь, когда обе стороны имеют общий ключ, они могут симметрично шифровать весь сеанс SSH. Один и тот же ключ можно использовать для шифрования и расшифровки сообщений (читайте: раздел о симметричном шифровании).

Теперь, когда защищенный сеанс с симметричным шифрованием установлен, пользователь должен пройти аутентификацию.

Аутентификация пользователя

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

Хотя пароли зашифрованы, все же не рекомендуется использовать пароли для безопасных соединений. Это связано с тем, что многие боты могут просто подобрать простые пароли или пароли по умолчанию и получить доступ к вашей учетной записи. Вместо этого рекомендуемой альтернативой являются пары ключей SSH.

Это набор асимметричных ключей, используемых для аутентификации пользователя без необходимости ввода пароля.

Заключение

Глубокое понимание того, как работает SSH, может помочь пользователям понять аспекты безопасности этой технологии. Большинство людей считают этот процесс чрезвычайно сложным и непонятным, но он намного проще, чем многие думают.

Если вам интересно, сколько времени требуется компьютеру, чтобы вычислить хэш и аутентифицировать пользователя, ну, это происходит менее чем за секунду. На самом деле максимальное количество времени тратится на передачу данных через Интернет.

Надеемся, что это руководство по SSH помогло вам увидеть, как различные технологии могут быть объединены вместе для создания надежной системы, в которой каждый механизм играет очень важную роль. Кроме того, теперь вы знаете, почему Telnet ушел в прошлое, как только появился SSH.

Если вам нужны дополнительные руководства по Linux, обязательно ознакомьтесь с нашим разделом руководств по VPS.

Часто задаваемые вопросы о SSH

Почему используется SSH?

Secure Shell (сокращенно SSH) — это сетевой протокол связи, позволяющий двум компьютерам взаимодействовать друг с другом. SSH также делает возможной передачу данных между двумя компьютерами.

Что означает SSH?

SSH — это аббревиатура сетевого протокола Secure Shell или Secure Socket Shell.

Чем отличается SSH от SSL?

SSH создает защищенную сеть между компьютерами, что делает возможной передачу данных. SSL, с другой стороны, шифрует передаваемые данные, уменьшая количество злоумышленных и фишинговых попыток.

Домантас возглавляет команды по контенту и SEO, предлагая свежие идеи и нестандартные подходы. Обладая обширными знаниями в области SEO и маркетинга, он стремится распространить информацию о Hostinger во всех уголках мира. В свободное время Домантас любит оттачивать свои навыки веб-разработки и путешествовать по экзотическим местам.

Подробнее от Домантаса Г.

Как работает SSH? {Подробный обзор}

Введение

Передача данных между устройствами в сети должна регулироваться для правильной связи устройств. Передача осуществляется с набором правил, известных как сетевой протокол.

Ранние сетевые протоколы, такие как Telnet и rsh, не обеспечивали достаточной защиты от вредоносных кибератак. Потребность в более безопасном методе сетевой связи вдохновила на создание протокола SSH.

В этом уроке мы поговорим о том, что такое SSH, почему он используется и как он работает.

Примечание: В руководстве речь пойдет о SSh3, текущей версии протокола. Оригинальный SSH теперь считается устаревшим и менее безопасным.

Что такое SSH?

SSH (сокращение от Secure Shell) — это сетевой протокол, обеспечивающий безопасный способ удаленного подключения двух компьютеров. SSH использует шифрование, чтобы гарантировать, что хакеры не смогут интерпретировать трафик между двумя подключенными устройствами.

SSH состоит из трех отдельных уровней:

  • Транспортный уровень устанавливает безопасную и защищенную связь между клиентом и сервером во время и после аутентификации. Он контролирует шифрование данных, дешифрование и защиту целостности. Кроме того, он помогает ускорить обмен данными, обеспечивая сжатие и кэширование данных.
  • Уровень аутентификации сообщает клиенту о поддерживаемых методах аутентификации. Он также проводит весь процесс аутентификации пользователя.
  • Уровень соединения управляет связью между машинами после успешной аутентификации. Он обрабатывает открытие и закрытие каналов связи и позволяет использовать несколько каналов для нескольких сеансов.

Для чего используется SSH?

SSH обеспечивает уровень безопасности для передачи информации между машинами. Вот некоторые важные варианты использования SSH:

  • Удаленный доступ — SSH обеспечивает зашифрованные удаленные подключения для пользователей и процессов.
  • Передача файлов — SFTP, безопасный протокол передачи файлов, управляемый SSH, обеспечивает безопасный способ управления файлами по сети.
  • X11 Forwarding — Пользователи могут запускать X-приложения, размещенные на сервере, со своих клиентских компьютеров.
  • Переадресация портов. Сопоставляя порт клиента с удаленными портами сервера, SSH помогает защитить другие сетевые протоколы, такие как TCP/IP.
  • Туннелирование — этот метод инкапсуляции обеспечивает безопасную передачу данных. Туннелирование полезно для доступа к важным для бизнеса онлайн-материалам из незащищенных сетей, поскольку оно может выступать в качестве удобной альтернативы VPN.
  • Управление сетью — Протокол SSH управляет сетевой инфраструктурой и другими частями системы.

Как работает SSH?

SSH — это клиент-серверный протокол. Это означает, что протокол позволяет устройству, запрашивающему информацию или услуги (клиенту), подключаться к другому устройству (серверу).

Когда клиент подключается к серверу через SSH, машиной можно управлять как локальным компьютером.

У сервера есть назначенный TCP-порт, через который он отслеживает сеть, ожидая, пока клиенты инициируют соединение. Прежде чем клиент подключится и начнет выдавать SSH-команды, ему необходимо пройти процесс аутентификации.

Установление SSH-соединения

Выполните на клиентском компьютере следующую команду, чтобы инициировать SSH-соединение:

 ssh [имя пользователя]@[server_ip_or_hostname] 

Когда сервер получает запросы, начинается согласование сеанса шифрования.

Согласование сеанса шифрования

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

Клиент сравнивает протоколы со своим набором. Если есть совпадающие протоколы, машины соглашаются использовать один из них для установления соединения.

Клиент сравнивает открытый ключ сервера с закрытым ключом, хранящимся в его системе, при первой попытке подключения. Если ключи совпадают, клиент и сервер соглашаются использовать симметричное шифрование для связи во время сеанса SSH. Для этого они обмениваются данными, используя процесс асимметричного шифрования, в котором применяется алгоритм обмена ключами Диффи-Хеллмана (DH).

Алгоритм DH позволяет компьютерам работать вместе и безопасно создавать криптографический ключ в общедоступной сети. Чтобы сгенерировать ключ, машины выполняют следующие шаги:

  • Машины согласовывают два числа : модуль и базовое число. Чтобы предотвратить расшифровку ключа методом грубой силы, выбранный модуль представляет собой простое число, состоящее не менее чем из 600 цифр.
  • Машины отдельно выбирают одно число и применяют его к уравнению, включающему два общедоступных числа.
  • Сервер и клиент обмениваются вычисленными значениями .
  • Теперь каждая машина выполняет вычисление , используя результат, полученный от другой.

Выполняя описанные выше шаги, обе машины вычисляют одно и то же значение, свой секретный ключ. Наконец, сервер пытается аутентифицировать пользователя, запрашивающего доступ.

Примечание. Надежная аутентификация пользователя — это одна из мер, которые необходимо применить для защиты вашего SSH-сервера. Дополнительные советы по безопасности см. в нашей статье «Лучшие практики безопасности SSH в Linux».

Аутентификация пользователя

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

Асимметрично зашифрованные пары открытого и закрытого ключей SSH являются лучшим вариантом. Как только клиент расшифровывает сообщение, сервер предоставляет клиенту доступ к системе.

Чтобы сгенерировать пару ключей SSH, введите в терминале ssh-keygen . В результате система генерирует и сохраняет ключи.

Дополнительные сведения об этом процессе см. в разделе Как сгенерировать ключи SSH в Ubuntu (процесс практически одинаков во всех дистрибутивах Linux и Mac OS).

Описание технологий шифрования SSH

SSH использует три типа шифрования данных при обмене данными между машинами. Это:

  • Симметричное шифрование
  • Асимметричное шифрование
  • Хеширование.

Симметричное шифрование

Симметричное шифрование создает один ключ, которым обмениваются две машины. Затем машины используют ключ как для шифрования, так и для дешифрования. Этот метод быстрый, он не ресурсоемкий, и SSH использует его для каждой сессии.

Всякий раз, когда клиент и сервер согласовывают, какой алгоритм использовать для сеанса SSH, они всегда выбирают первый алгоритм в списке клиента, который поддерживает сервер.

Асимметричное шифрование

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

SSH использует временные асимметричные ключи для обмена симметричными ключами, например, в процессе аутентификации пользователя.

Хеширование

SSH использует хеширование для проверки того, приходят ли пакеты данных из источника, из которого они пришли. Алгоритмы хэширования, используемые для создания хэшей в SSH, — это код аутентификации сообщения (MAC) и код аутентификации хешированного сообщения (HMAC).