Первое знакомство с SSH: понимание шифрования, портов и соединений
Первое знакомство с SSH: понимание шифрования, портов и соединений

Что такое СШХ

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

Пользователи Linux или macOS могут подключиться по SSH к удаленному серверу прямо из окна терминала. Пользователи Windows могут использовать SSH-клиенты, такие как Putty и XShell, для подключения к удаленным серверам. Как показано ниже, это типичное приглашение SSH.

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

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

Откройте терминал и выполните следующие действия:

Команды SSH состоят из трех разных частей:

Язык кода:javascript
копировать
ssh {user}@{host}

SSH Команда предписывает вашей системе включить зашифрованную безопасность. Shell соединять。{user} Представляет учетную запись, к которой осуществляется доступ. Например, мы можем захотеть получить доступ root пользователь,По сути, это синоним системного администратора.,Иметь полное право изменять что-либо в системе.。{host} Относится к компьютеру, к которому мы хотим получить доступ. Это может быть с удаленного компьютера IP адрес (напр. 192.168.0.103) или имя домена (например. www.abc.test)。

Введите приведенную выше команду,Помнить{user}и{host}Замените на свой,Вам будет предложено ввести пароль для запрошенной учетной записи. После ввода пароля,На экране ничего не появится,Но ваш пароль на самом деле передается. После ввода,Нажмите еще раз Enter ключ. Если ваш пароль верен, вы увидите окно подключения к удаленному терминалу.

Узнайте о различных технологиях шифрования

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

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

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

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

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

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

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

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

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

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

Например, если двое Ubuntu 14.04 LTS Машина проходит SSH общение, они будут использовать aes128-ctr в качестве пароля по умолчанию.

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

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

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

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

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

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

Хеширование

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

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

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

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

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

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

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

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

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

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

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

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

После установления обе стороны используют то, что называется Алгоритм обмена ключами Диффи-Хеллмана[3]создать симметричный ключ。Благодаря этому алгоритму,И клиент, и сервер могут получить общий ключ шифрования.,Этот ключ будет использоваться на протяжении всего сеанса связи.

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

  1. Клиент и сервер согласуют очень большое простое число.,Конечно, это простое число не имеет общих делителей. Это простое значение также называется начальным значением.
  2. Следующий,Обе стороны договариваются об общем механизме шифрования.,Генерирует другой набор значений, манипулируя начальным значением определенным алгоритмическим способом. Эти механизмы еще называют генераторами шифрования.,Выполняйте обширные операции над начальными значениями. АЕС (Расширенное стандартное шифрование) является примером такого генератора.
  3. Каждая сторона генерирует еще одно простое число. Это простое число используется в качестве секретного закрытого ключа для взаимодействия.
  4. Недавно сгенерированный закрытый ключиобщий номеришифрованиеалгоритм(нравиться AES) используются вместе для вычисления открытого ключа и его передачи на другой компьютер.
  5. Затем,Каждая сторона использует свой личный закрытый ключ, общий открытый ключ другой машины и исходное простое число для создания окончательного общего ключа. Ключ рассчитывается независимо двумя компьютерами,Но существующие обе стороны создадут один и тот же ключ шифрования.
  6. Поскольку обе стороны имеют общий ключ, весь SSH Разговор протекает симметрично шифрование. Один и тот же ключ можно использовать для шифрования и дешифрования информации (читай: симметричная часть шифрования).

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

Подтвердите личность пользователя

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

Хотя пароль был изменен,Но использовать пароли в условиях безопасности существования все же не рекомендуется. Это связано с тем, что многие боты могут просто перебрать простые пароли и пароли по умолчанию.,чтобы получить доступ к вашей учетной записи shell права доступа. Рекомендуется использовать Пара ключей SSH[4]

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

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

Ссылки

[1]

TCP: https://www.hostinger.com/tutorials/tcp-protocol

[2]

Изменять SSH порт: https://www.hostinger.com/tutorials/how-to-change-ssh-port-vps

[3]

Diffie-Hellman Алгоритм обмена ключами: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

[4]

SSH Ключевая пара: https://www.hostinger.com/tutorials/ssh/how-to-set-up-ssh-keys

boy illustration
[Спецификация] Результаты и исключения возврата интерфейса SpringBoot обрабатываются единообразно, поэтому инкапсуляция является элегантной.
boy illustration
Интерпретация каталога веб-проекта Flask
boy illustration
Что такое подробное объяснение файла WSDL_wsdl
boy illustration
Как запустить большую модель ИИ локально
boy illustration
Подведение итогов десяти самых популярных веб-фреймворков для Go
boy illustration
5 рекомендуемых проектов CMS с открытым исходным кодом на базе .Net Core
boy illustration
Java использует httpclient для отправки запросов HttpPost (отправка формы, загрузка файлов и передача данных Json)
boy illustration
Руководство по развертыванию Nginx в Linux (Centos)
boy illustration
Интервью с Alibaba по Java: можно ли использовать @Transactional и @Async вместе?
boy illustration
Облачный шлюз Spring реализует примеры балансировки нагрузки и проверки входа в систему.
boy illustration
Используйте Nginx для решения междоменных проблем
boy illustration
Произошла ошибка, когда сервер веб-сайта установил соединение с базой данных. WordPress предложил решение проблемы с установкой соединения с базой данных... [Легко понять]
boy illustration
Новый адрес java-библиотеки_16 топовых Java-проектов с открытым исходным кодом, достойных вашего внимания! Обязательно к просмотру новичкам
boy illustration
Лучшие практики Kubernetes для устранения несоответствий часовых поясов внутри контейнеров
boy illustration
Введение в проект удаления водяных знаков из коротких видео на GitHub Douyin_TikTok_Download_API
boy illustration
Весенние аннотации: подробное объяснение @Service!
boy illustration
Пожалуйста, не используйте foreach для пакетной вставки в MyBatis. Для 5000 фрагментов данных потребовалось 14 минут. .
boy illustration
Как создать проект Node.js с помощью npm?
boy illustration
Mybatis-plus использует typeHandler для преобразования объединенных строк String в списки списков.
boy illustration
Не удалось установить программное обеспечение Mitsubishi. Возможно, возникла проблема с реестром.
boy illustration
Разрешение ошибок проекта SpringBoot 3 mybatis-plus: org.apache.ibatis.binding.BindingException: неверный оператор привязки
boy illustration
Более краткая проверка параметров. Для проверки параметров используйте SpringBoot Validation.
boy illustration
Поиграйтесь с интеграцией Spring Boot (платформа запланированных задач Quartz)
boy illustration
Несколько популярных режимов интерфейса API: RESTful, GraphQL, gRPC, WebSocket, Webhook.
boy illustration
Redis: практика публикации (pub) и подписки (sub)
boy illustration
Подробное объяснение пакета Golang Context
boy illustration
Краткое руководство: создайте свое первое приложение .NET Aspire
boy illustration
Краткое обсуждение метода пакетной вставки MyBatis: обработка 100 000 фрагментов данных занимает всего 2 секунды.
boy illustration
[Инструмент] Используйте nvm для управления переключением версий nodejs, это так здорово!
boy illustration
HTML можно преобразовать в word_html для отображения текстовых документов.