Как работает SSH
SSH или Secure Shell - это протокол удаленного администрирования, который позволяет пользователям контролировать и изменять свои удаленные серверы через Интернет. Служба была создана как безопасная замена незашифрованного Telnet и использует криптографические методы, чтобы гарантировать, что вся связь с удаленным сервером и с удаленным сервером происходит в зашифрованном виде. Он предоставляет механизм для аутентификации удаленного пользователя, передачи входных данных от клиента к хосту и ретрансляции выходных данных обратно клиенту.
На рисунке ниже показано типичное окно SSH. Любой пользователь Linux или macOS может подключиться к своему удаленному серверу по SSH прямо из окна терминала. Пользователи Windows могут воспользоваться преимуществами клиентов SSH, таких как Putty. Вы можете выполнять команды оболочки таким же образом, как если бы вы физически работали с удаленным компьютером.
В этом руководстве по SSH будут рассмотрены основы работы ssh, а также базовые технологии, используемые протоколом для обеспечения безопасного метода удаленного доступа. Он будет охватывать различные уровни и типы используемого шифрования, а также назначение каждого уровня.
Для пользователей Mac и Linux: перейдите в свою программу терминала и выполните следующую процедуру:
Команда SSH состоит из 3 отдельных частей:
Когда вы нажмете Enter, вам будет предложено ввести пароль для запрашиваемой учетной записи. Когда вы его вводите, на экране ничего не появляется, но ваш пароль фактически передается. Когда вы закончите вводить текст, нажмите Enter еще раз. Если ваш пароль правильный, вы увидите окно удаленного терминала.
Если вы хотите узнать больше о некоторых командах SSH, найдите их здесь.
Симметричное шифрование часто называют шифрованием с общим ключом или общим секретом . Обычно используется только один ключ, а иногда и пара ключей, где один ключ может быть легко вычислен с использованием другого ключа.
Симметричные ключи используются для шифрования всего обмена данными во время сеанса SSH. И клиент, и сервер получают секретный ключ, используя согласованный метод, и результирующий ключ никогда не раскрывается какой-либо третьей стороне. Процесс создания симметричного ключа осуществляется алгоритмом обмена ключами . Что делает этот алгоритм особенно безопасным, так это тот факт, что ключ никогда не передается между клиентом и хостом. Вместо этого два компьютера совместно используют общедоступные данные, а затем манипулируют ими, чтобы независимо вычислить секретный ключ. Даже если другая машина перехватит общедоступные данные, она не сможет вычислить ключ, поскольку алгоритм обмена ключами неизвестен.
Однако следует отметить, что секретный токен специфичен для каждого сеанса SSH и генерируется до аутентификации клиента. После создания ключа все пакеты, перемещающиеся между двумя машинами, должны быть зашифрованы с помощью закрытого ключа. Сюда входит пароль, вводимый пользователем в консоль, поэтому учетные данные всегда защищены от анализаторов сетевых пакетов.
Существует множество шифров симметричного шифрования, включая, помимо прочего, AES (Advanced Encryption Standard), CAST128, Blowfish и т. Д. Перед установлением защищенного соединения клиент и хост решают, какой шифр использовать, публикуя список поддерживаемые шифры в порядке предпочтения. В качестве двунаправленного шифра используется наиболее предпочтительный шифр из поддерживаемых клиентами шифров, который присутствует в списке хоста.
Например, если две машины Ubuntu 14.04 LTS обмениваются данными друг с другом по SSH, они будут использовать aes128-ctr в качестве шифра по умолчанию.
Открытый ключ, как следует из названия, открыто распространяется и передается всем сторонам. Несмотря на то, что он тесно связан с закрытым ключом с точки зрения функциональности, закрытый ключ не может быть математически вычислен на основе открытого ключа. Связь между этими двумя ключами очень сложна: сообщение, зашифрованное открытым ключом машины, может быть расшифровано только закрытым ключом той же машины. Это одностороннее отношение означает, что открытый ключ не может расшифровать свои собственные сообщения, а также не может расшифровать что-либо, зашифрованное закрытым ключом.
Закрытый ключ должен оставаться закрытым, т. Е. Чтобы соединение было защищенным, третьи лица не должны его знать. Сила всего соединения заключается в том, что закрытый ключ никогда не раскрывается, поскольку это единственный компонент, способный дешифровать сообщения, зашифрованные с использованием его собственного открытого ключа. Следовательно, любая сторона, имеющая возможность дешифровать публично подписанные сообщения, должна обладать соответствующим закрытым ключом.
В отличие от общего представления, асимметричное шифрование не используется для шифрования всего сеанса SSH. Вместо этого он используется только во время алгоритма обмена ключами симметричного шифрования. Перед инициированием защищенного соединения обе стороны генерируют пары временных открытого и закрытого ключей и совместно используют свои соответствующие закрытые ключи для создания общего секретного ключа.
После установки защищенной симметричной связи сервер использует открытый ключ клиента для генерации, запроса и передачи клиенту для аутентификации. Если клиент может успешно расшифровать сообщение, это означает, что он содержит закрытый ключ, необходимый для соединения. Затем начинается сеанс SSH.
Легко сгенерировать криптографический хеш из заданного ввода, но невозможно сгенерировать вход из хеша. Это означает, что если у клиента есть правильный ввод, он может сгенерировать криптографический хэш и сравнить его значение, чтобы убедиться, что он обладает правильным вводом.
SSH использует хэши для проверки подлинности сообщений. Это делается с помощью HMACs или Н золы на основе M essage uthentication С Odes. Это гарантирует, что полученная команда никоим образом не будет изменена.
Пока выбирается алгоритм симметричного шифрования, также выбирается подходящий алгоритм аутентификации сообщения. Это работает аналогично тому, как выбирается шифр, как описано в разделе симметричного шифрования.
Каждое передаваемое сообщение должно содержать MAC, который рассчитывается с использованием симметричного ключа, порядкового номера пакета и содержимого сообщения. Он отправляется вне симметрично зашифрованных данных в качестве заключительной части коммуникационного пакета.
По умолчанию SSH работает на TCP-порту 22 (хотя при необходимости его можно изменить). Хост (сервер) прослушивает порт 22 (или любой другой назначенный порт SSH) на предмет входящих подключений. Он организует безопасное соединение, аутентифицируя клиента и открывая правильную среду оболочки, если проверка прошла успешно.
Клиент должен начать SSH-соединение, инициировав установление связи TCP с сервером, обеспечивая безопасное симметричное соединение, проверяя, соответствует ли идентификатор, отображаемый сервером, предыдущим записям (обычно записанным в файле хранилища ключей RSA) и представляя необходимые учетные данные пользователя. для аутентификации соединения.
Установление соединения состоит из двух этапов: во-первых, обе системы должны согласовать стандарты шифрования для защиты будущих коммуникаций, а во-вторых, пользователь должен аутентифицировать себя. Если учетные данные совпадают, то пользователю предоставляется доступ.
Как только это установлено, две стороны используют так называемый алгоритм обмена ключами Диффи-Хеллмана для создания симметричного ключа. Этот алгоритм позволяет как клиенту, так и серверу получить общий ключ шифрования, который отныне будет использоваться для шифрования всего сеанса связи.
Вот как алгоритм работает на самом базовом уровне:
Хотя пароли зашифрованы, все же не рекомендуется использовать пароли для безопасных соединений. Это связано с тем, что многие боты могут просто подобрать пароли или пароли по умолчанию и получить доступ к вашей учетной записи. Вместо этого рекомендуется использовать SSH Key Pairs.
Это набор асимметричных ключей, используемых для аутентификации пользователя без необходимости ввода пароля.
На рисунке ниже показано типичное окно SSH. Любой пользователь Linux или macOS может подключиться к своему удаленному серверу по SSH прямо из окна терминала. Пользователи Windows могут воспользоваться преимуществами клиентов SSH, таких как Putty. Вы можете выполнять команды оболочки таким же образом, как если бы вы физически работали с удаленным компьютером.
В этом руководстве по SSH будут рассмотрены основы работы ssh, а также базовые технологии, используемые протоколом для обеспечения безопасного метода удаленного доступа. Он будет охватывать различные уровни и типы используемого шифрования, а также назначение каждого уровня.
Как работает SSH
Если вы используете Linux или Mac, то использовать SSH очень просто. Если вы используете Windows, вам нужно будет использовать SSH-клиент для открытия SSH-соединений. Самый популярный клиент SSH - PuTTY, о котором вы можете узнать больше здесь.Для пользователей Mac и Linux: перейдите в свою программу терминала и выполните следующую процедуру:
Команда SSH состоит из 3 отдельных частей:
ssh {user}@{host}
Команда ключа SSH сообщает вашей системе, что вы хотите открыть зашифрованное соединение Secure Shell. {user} представляет учетную запись, к которой вы хотите получить доступ. Например, вы можете захотеть получить доступ к пользователю root , который в основном является синонимом системного администратора с полными правами на изменение чего-либо в системе. {host} относится к компьютеру, к которому вы хотите получить доступ. Это может быть IP-адрес (например, 244.235.23.19) или доменное имя (например, www.xyzdomain.com).Когда вы нажмете Enter, вам будет предложено ввести пароль для запрашиваемой учетной записи. Когда вы его вводите, на экране ничего не появляется, но ваш пароль фактически передается. Когда вы закончите вводить текст, нажмите Enter еще раз. Если ваш пароль правильный, вы увидите окно удаленного терминала.
Если вы хотите узнать больше о некоторых командах SSH, найдите их здесь.
Понимание различных методов шифрования
Существенным преимуществом SSH перед его предшественниками является использование шифрования для обеспечения безопасной передачи информации между хостом и клиентом. Хост - это удаленный сервер, к которому вы пытаетесь получить доступ, а клиент - это компьютер, который вы используете для доступа к хосту. SSH использует три различных технологии шифрования:- Симметричное шифрование
- Асимметричное шифрование
- Хеширование.
Симметричное шифрование
Симметричное шифрование - это форма шифрования, при которой секретный ключ используется как для шифрования, так и для дешифрования сообщения как клиентом, так и хостом. Фактически, любой человек, владеющий ключом, может расшифровать передаваемое сообщение.Симметричное шифрование часто называют шифрованием с общим ключом или общим секретом . Обычно используется только один ключ, а иногда и пара ключей, где один ключ может быть легко вычислен с использованием другого ключа.
Симметричные ключи используются для шифрования всего обмена данными во время сеанса SSH. И клиент, и сервер получают секретный ключ, используя согласованный метод, и результирующий ключ никогда не раскрывается какой-либо третьей стороне. Процесс создания симметричного ключа осуществляется алгоритмом обмена ключами . Что делает этот алгоритм особенно безопасным, так это тот факт, что ключ никогда не передается между клиентом и хостом. Вместо этого два компьютера совместно используют общедоступные данные, а затем манипулируют ими, чтобы независимо вычислить секретный ключ. Даже если другая машина перехватит общедоступные данные, она не сможет вычислить ключ, поскольку алгоритм обмена ключами неизвестен.
Однако следует отметить, что секретный токен специфичен для каждого сеанса SSH и генерируется до аутентификации клиента. После создания ключа все пакеты, перемещающиеся между двумя машинами, должны быть зашифрованы с помощью закрытого ключа. Сюда входит пароль, вводимый пользователем в консоль, поэтому учетные данные всегда защищены от анализаторов сетевых пакетов.
Существует множество шифров симметричного шифрования, включая, помимо прочего, AES (Advanced Encryption Standard), CAST128, Blowfish и т. Д. Перед установлением защищенного соединения клиент и хост решают, какой шифр использовать, публикуя список поддерживаемые шифры в порядке предпочтения. В качестве двунаправленного шифра используется наиболее предпочтительный шифр из поддерживаемых клиентами шифров, который присутствует в списке хоста.
Например, если две машины Ubuntu 14.04 LTS обмениваются данными друг с другом по SSH, они будут использовать aes128-ctr в качестве шифра по умолчанию.
Асимметричное шифрование
В отличие от симметричного шифрования, асимметричное шифрование использует два отдельных ключа для шифрования и дешифрования. Эти два ключа известны как открытый ключ и закрытый ключ . Вместе оба этих ключа образуют пару открытого и закрытого ключей .Открытый ключ, как следует из названия, открыто распространяется и передается всем сторонам. Несмотря на то, что он тесно связан с закрытым ключом с точки зрения функциональности, закрытый ключ не может быть математически вычислен на основе открытого ключа. Связь между этими двумя ключами очень сложна: сообщение, зашифрованное открытым ключом машины, может быть расшифровано только закрытым ключом той же машины. Это одностороннее отношение означает, что открытый ключ не может расшифровать свои собственные сообщения, а также не может расшифровать что-либо, зашифрованное закрытым ключом.
Закрытый ключ должен оставаться закрытым, т. Е. Чтобы соединение было защищенным, третьи лица не должны его знать. Сила всего соединения заключается в том, что закрытый ключ никогда не раскрывается, поскольку это единственный компонент, способный дешифровать сообщения, зашифрованные с использованием его собственного открытого ключа. Следовательно, любая сторона, имеющая возможность дешифровать публично подписанные сообщения, должна обладать соответствующим закрытым ключом.
В отличие от общего представления, асимметричное шифрование не используется для шифрования всего сеанса SSH. Вместо этого он используется только во время алгоритма обмена ключами симметричного шифрования. Перед инициированием защищенного соединения обе стороны генерируют пары временных открытого и закрытого ключей и совместно используют свои соответствующие закрытые ключи для создания общего секретного ключа.
После установки защищенной симметричной связи сервер использует открытый ключ клиента для генерации, запроса и передачи клиенту для аутентификации. Если клиент может успешно расшифровать сообщение, это означает, что он содержит закрытый ключ, необходимый для соединения. Затем начинается сеанс SSH.
Хеширование
Одностороннее хеширование - это еще одна форма криптографии, используемая в Secure Shell Connections. Односторонние хеш-функции отличаются от двух вышеупомянутых форм шифрования в том смысле, что они никогда не предназначены для дешифрования. Они генерируют уникальное значение фиксированной длины для каждого входа, которое не показывает четкой тенденции, которую можно использовать. Это делает их практически невозможными.Легко сгенерировать криптографический хеш из заданного ввода, но невозможно сгенерировать вход из хеша. Это означает, что если у клиента есть правильный ввод, он может сгенерировать криптографический хэш и сравнить его значение, чтобы убедиться, что он обладает правильным вводом.
SSH использует хэши для проверки подлинности сообщений. Это делается с помощью HMACs или Н золы на основе M essage uthentication С Odes. Это гарантирует, что полученная команда никоим образом не будет изменена.
Пока выбирается алгоритм симметричного шифрования, также выбирается подходящий алгоритм аутентификации сообщения. Это работает аналогично тому, как выбирается шифр, как описано в разделе симметричного шифрования.
Каждое передаваемое сообщение должно содержать MAC, который рассчитывается с использованием симметричного ключа, порядкового номера пакета и содержимого сообщения. Он отправляется вне симметрично зашифрованных данных в качестве заключительной части коммуникационного пакета.
Как SSH работает с этими методами шифрования
Принцип работы SSH заключается в использовании модели клиент-сервер для аутентификации двух удаленных систем и шифрования данных, передаваемых между ними.По умолчанию SSH работает на TCP-порту 22 (хотя при необходимости его можно изменить). Хост (сервер) прослушивает порт 22 (или любой другой назначенный порт SSH) на предмет входящих подключений. Он организует безопасное соединение, аутентифицируя клиента и открывая правильную среду оболочки, если проверка прошла успешно.
Клиент должен начать SSH-соединение, инициировав установление связи TCP с сервером, обеспечивая безопасное симметричное соединение, проверяя, соответствует ли идентификатор, отображаемый сервером, предыдущим записям (обычно записанным в файле хранилища ключей RSA) и представляя необходимые учетные данные пользователя. для аутентификации соединения.
Установление соединения состоит из двух этапов: во-первых, обе системы должны согласовать стандарты шифрования для защиты будущих коммуникаций, а во-вторых, пользователь должен аутентифицировать себя. Если учетные данные совпадают, то пользователю предоставляется доступ.
Согласование шифрования сеанса
Когда клиент пытается подключиться к серверу через TCP, сервер представляет протоколы шифрования и соответствующие версии, которые он поддерживает. Если у клиента есть похожая совпадающая пара протокола и версии, соглашение достигается, и соединение запускается с принятым протоколом. Сервер также использует асимметричный открытый ключ, который клиент может использовать для проверки подлинности хоста.Как только это установлено, две стороны используют так называемый алгоритм обмена ключами Диффи-Хеллмана для создания симметричного ключа. Этот алгоритм позволяет как клиенту, так и серверу получить общий ключ шифрования, который отныне будет использоваться для шифрования всего сеанса связи.
Вот как алгоритм работает на самом базовом уровне:
- И клиент, и сервер соглашаются на очень большое простое число, которое, конечно, не имеет общего множителя. Это значение простого числа также известно как начальное значение .
- Затем обе стороны договариваются об общем механизме шифрования для генерации другого набора значений, манипулируя начальными значениями определенным алгоритмическим способом. Эти механизмы, также известные как генераторы шифрования, выполняют большие операции с начальным числом. Примером такого генератора является AES (Advanced Encryption Standard).
- Обе стороны независимо генерируют другое простое число. Он используется как секретный закрытый ключ для взаимодействия.
- Этот недавно сгенерированный закрытый ключ с общим номером и алгоритмом шифрования (например, AES) используется для вычисления открытого ключа, который передается на другой компьютер.
- Затем стороны используют свой личный закрытый ключ, общий открытый ключ другой машины и исходное простое число для создания окончательного общего ключа. Этот ключ независимо вычисляется обоими компьютерами, но создает одинаковый ключ шифрования на обеих сторонах.
- Теперь, когда у обеих сторон есть общий ключ, они могут симметрично зашифровать весь сеанс SSH. Один и тот же ключ можно использовать для шифрования и дешифрования сообщений (читайте: раздел о симметричном шифровании).
Аутентификация пользователя
Последний этап перед тем, как пользователю будет предоставлен доступ к серверу, - это аутентификация его / ее учетных данных. Для этого большинство пользователей SSH используют пароль. Пользователя просят ввести имя пользователя, а затем пароль. Эти учетные данные безопасно проходят через симметрично зашифрованный туннель, поэтому нет никаких шансов, что они будут перехвачены третьей стороной.Хотя пароли зашифрованы, все же не рекомендуется использовать пароли для безопасных соединений. Это связано с тем, что многие боты могут просто подобрать пароли или пароли по умолчанию и получить доступ к вашей учетной записи. Вместо этого рекомендуется использовать SSH Key Pairs.
Это набор асимметричных ключей, используемых для аутентификации пользователя без необходимости ввода пароля.
Комментариев 0