Способ совместного использования / изменения удаленного компьютера, как по волшебству, при сохранении полной безопасности.
Оглавление
- Введение
- Протоколы
- SSH-команда
- Почему SSH важен для вас как разработчика программного обеспечения
- Как работает SSH?
- Симметричное шифрование
- Асимметричное шифрование
- Всегда ли мы используем асимметричное шифрование?
- Хеширование
- "Аутентификация"
- "Заключение"
Введение
Вы когда-нибудь задумывались, какой самый безопасный способ удаленного подключения двух компьютеров при обмене файлами?
Или есть ли способ, которым мы можем поддерживать связь двух систем, как портал, без необходимости многократно вводить пароли, сохраняя при этом безопасность систем?
Ответ на это ДА!!! 🥳
Мы можем сделать все это, используя… 🥁
SSH!!
Звучит довольно круто, правда?
В этом блоге мы поговорим о SSH и о том, как мы можем обмениваться файлами, а также контролировать и изменять удаленные компьютеры через Интернет с помощью шифрования.
Прежде чем понять это, сначала дайте нам знать, что такое протоколы, потому что SSH — это тип протокола.
Протоколы
Протоколы — это соглашение, по которому машины 💻 общаются друг с другом. мы можем сказать, что это язык, на котором компьютеры общаются друг с другом.
Вот несколько примеров протоколов:
HTTP
(Протокол передачи гипертекста) → Позволяет пользователям обмениваться файлами, такими как HTML, CSS и JS, между браузером (клиентом) и сервером.HTTPS
(Защищенный протокол передачи гипертекста) —> аналогичен HTTP с дополнительным преимуществом шифрования для защиты файлов от третьих лиц.FTP
(протокол передачи файлов) —› также позволяет нам отправлять файлы, но часто используется для загрузки файлов на хостинговые платформы.IMAP
(протокол доступа к сообщениям в Интернете) -› позволяет нам отправлять электронные письма.📧SSH
(Протокол Secure Shell) -› позволяет пользователям общаться файлами, а также контролировать и изменять удаленные компьютеры через Интернет.
и еще много протоколов там…
Теперь вы можете подумать, в чем именно разница между HTTPS и SSH? поскольку оба являются способом связи и зашифрованы. 🤔
Основное различие между HTTPS и SSH заключается в том, что HTTPS используется только для передачи файлов между браузером и сервером и отображения веб-сайта, тогда как SSH — это оболочка для обмена или связи между двумя устройствами, а не только браузерами. Оболочка позволяет нам напрямую общаться с ОС.
Суммируя,
- SSH – ч/б связь между двумя компьютерами с использованием защищенной оболочки.
- HTTPS -› ч/б связь между браузером и сервером
В SSH-соединении участвуют 2 компьютера:
host
: Хост относится к удаленному серверу, к которому вы пытаетесь получить доступ.client
: Клиент — это компьютер, который вы используете для доступа к хосту.
SSH-команда
Теперь давайте посмотрим, как именно мы можем использовать SSH. Мы можем просто запустить команду SSH в нашем терминале: ssh {user}@{host}
.
- Если мы разберем это, здесь:
ssh
: Эта команда указывает системе, что мы хотим открыть зашифрованное безопасное соединение оболочки.user
: Пользователь представляет учетную запись, к которой вы хотите получить доступ. например. если вы хотите получить доступ в качестве системного администратора, вы можете использоватьroot
, который используется по умолчанию во многих системах.host
: Хост относится к компьютеру, к которому вы хотите получить доступ, который может быть IP-адресом или доменным именем.
Например, ssh [email protected]
Здесь ssh
сообщает ОС, что мы собираемся инициализировать соединение с оболочкой , root
— это пользователь (забавный факт: root часто является конфигурацией по умолчанию, используемой для доступа администратора 👨💼 к серверам) и 192.168.5.2
— это IP-адрес сервера, на который мы пытаемся попасть.
Если вы используете Linux или Mac, использовать SSH довольно просто, но если вы не можете: makeuseof.com/tag/beginners-guide-setting-s..
Но в случае Windows нам нужно использовать SSH-клиент для открытия SSH-соединений, и самый популярный для Windows называется «Putty».
Вы можете использовать следующий ресурс для Windows:
- PuTTY: mediatemple.net/community/products/dv/20440..
- Windows 10: howtogeek.com/336775/how-to-enable-and-use-..
- Дополнительный:
Теперь, когда все это настроено, 🥹 вы, должно быть, задаетесь вопросом: “ Но почему? зачем нам (разработчикам/инженерам) это нужно? В чем смысл всего этого? 🥲”
Почему SSH важен для вас как разработчика программного обеспечения?
SSH является важной концепцией для разработчиков, потому что нам придется использовать его все время на протяжении всей нашей карьеры.
Некоторые примеры:
- Подключение к GitHub, клонирование, отправка или извлечение файлов с их серверов на наши компьютеры, чтобы нам не приходилось использовать HTTPS и постоянно вводить пароли для клонирования репозитория.
- Чтобы удаленно получить доступ к вашему компьютеру.
- Наконец, Развертывание рабочих приложений на серверах. 😳
Итак, теперь вы понимаете, зачем нам это нужно. Но как на самом деле работает SSH?
Попробуем это понять! Кроме того, пожалуйста, возьмите себе кофе ☕️или чай :), потому что это будет длинное чтение и требует вашего внимания!
Итак, пейте кофеин, и начнем… 🔥
Как работает SSH?
Чтобы понять, как работает SSH, нам нужно понять 3 метода, используемые в SSH:
- Симметричное шифрование
- Асимметричное шифрование
- Хеширование
Прежде чем понять это, вы видите здесь слово «Шифрование»? Что именно это?
Итак, шифрование — это способ скрыть или перепутать часть информации, чтобы третье лицо не могло получить отчет, не имея какого-либо способа его расшифровки.
Симметричное шифрование
- Симметричное шифрование использует один секретный ключ как для шифрования, так и для дешифрования обеими сторонами.
- Давайте разберемся на примере:
- Предположим, мы хотим отправить строку
"Abhinav's Secret"
в качестве данных. - Здесь у первого пользователя мы шифруем наши данные, т.е.
"Abhinav's Secret"
, с помощью ключа, т.е.K1
, который выводит случайную строку. - Теперь мы можем отправить эту случайную зашифрованную строку тарабарщины непосредственно второму пользователю. и никакие третьи лица не могут понять эту тарабарщину.
- Второй пользователь может расшифровать эту случайную зашифрованную строку, используя тот же ключ (
K1
), и получить исходную строку, которая была"Abhinav's Secret"
.
Итак, опять же, с симметричным шифрованием любой, у кого есть ключ, может расшифровать передаваемое сообщение. И SSH общается через этот общий ключ.
Выглядит красиво, но какую проблему вы здесь заметили?👀 Можете ли вы придумать какую-нибудь?🙃
Что ж, любой, у кого есть ключ, может расшифровать сообщение.
- Итак, я пересылал что-то важное на другой компьютер. Если каким-то образом третья сторона найдет ключ, она сможет узнать информацию и расшифровать это сообщение, просто используя тот же ключ, что и мы.
- Мы должны получить этот ключ безопасным образом, чтобы другие люди не могли его использовать или не могли узнать, что это такое. И это делается с помощью так называемого алгоритма обмена ключами.
- Что делает этот алгоритм особенно безопасным, так это то, что ключ на самом деле никогда не передается между клиентом и хостом. Вместо этого два компьютера совместно используют общедоступные фрагменты данных, а затем обрабатывают их для независимого вычисления секретного ключа.
Но следует отметить, что секретный ключ специфичен для каждого сеанса SSH и генерируется до аутентификации клиента.
Таким образом, как только между этими двумя сторонами будет сгенерирован ключ, все пакеты, перемещающиеся между этими двумя машинами, должны быть зашифрованы с помощью этого ключа. Поэтому, используя симметричное шифрование, мы можем общаться конфиденциально.
Асимметричное шифрование
- В симметричном шифровании мы узнали, что нам нужен какой-то алгоритм обмена ключами, и этот алгоритм обмена ключами называется асимметричным шифрованием.
- В отличие от симметричного шифрования, асимметричное использует 2 разных ключа для шифрования и дешифрования (закрытый и открытый ключ).
- Как мы видим на схеме, у нас есть 2 ключа для каждого компьютера. которые включают один закрытый и открытый ключ.
Как вы думаете, что может быть их функцией?
- Они говорят сами за себя, так что открытый ключ находится в открытом доступе, им можно поделиться с кем угодно, но закрытый ключ нужно хранить в очень надежном месте и никогда не передавать другим лицам. ни с кем.
- Это формирует пару закрытый-открытый ключ, и эти ключи связаны друг с другом с точки зрения функциональности таким образом, что сообщение, зашифрованное с помощью открытого ключа, может быть расшифровано только закрытый ключ той же машины. это то, что мы называем
One Way Relationship
.
Возьмем пример,
- Если мы поделимся нашим открытым ключом с нашим другом, и он также поделится своим с нами.
- Теперь у нас есть его открытый ключ, верно? и теперь, если мы зашифруем некоторые данные, скажем,
"Password123"
с помощью его открытого ключа, который мы получили, и отправим ему зашифрованные данные (предположим, что это случайная тарабарская строка"E+345sd$"
).
- Теперь он может расшифровать его, используя свой закрытый ключ, и получить данные, которые представляют собой строку
"Password123"
, поскольку оба ключа имеют одностороннюю связь, как я упоминал ранее. - Как мы видим, сила этого типа шифрования заключается в том, что закрытый ключ никогда не снимается и не передается, верно? что довольно удивительно!
Всегда ли мы используем асимметричное шифрование?
- Теперь большинство людей предполагают, что мы используем асимметричное шифрование полностью во всех типах SSH-соединений, что не совсем точно.
- На самом деле это соединение используется только во время алгоритма обмена ключами симметричного шифрования.
- Если вы помните, нам нужен только один ключ для обмена для всего соединения в симметричном шифровании, поэтому мы используем асимметричное шифрование только для безопасного обмена этим ключом.
- Итак, всякий раз, когда инициируется новое SSH-соединение, обе стороны генерируют временные открытые и закрытые ключи и в этот момент делятся соответствующими открытыми ключами друг с другом, мы можем получить симметричный ключ, чтобы мы могли обмениваться информацией, используя что-то под названием
Diffie Hellman Key Exchange
.
Обмен ключами Диффи Хеллмана: позволяет каждой стороне объединить свои личные данные с общедоступными данными из других систем для получения идентичного секретного сеансового ключа. Вау! 🥵 кажется запутанным? Не волнуйтесь, я прилагаю несколько ресурсов, которые вы можете использовать, чтобы лучше понять это. ☺️
- youtube.com/watch?v=NmM9HA2MQGI
- youtube.com/watch?v=Yjrfm_oRO0w
- youtube.com/watch?v=vsXMMT2CqqE
- youtube.com/watch?v=NF1pwjL9-DE
- К настоящему времени мы должны знать, как мы можем сгенерировать симметричный ключ, используя асимметричное шифрование, используя обмен ключами Диффи Хеллмана. Таким образом, симметричный ключ останется для нас закрытым.
Разве это не смешно?
- Так называется «Обмен ключами», потому что мы на самом деле не обмениваемся ключами 🥹иначе это станет достоянием общественности, чего мы никогда не хотим! на самом деле мы просто делимся частями общедоступных переменных, таких как наши открытые ключи с каждого компьютера, и мы генерируем ключ отдельно в нашем собственном личном пространстве.
Кроме того, сейчас вы можете подумать: Отлично! хватит обо всех этих шифровках 🥲
Но поверьте мне, эти типы шифрования есть везде!
Вы, вероятно, используете его прямо сейчас, читая этот блог!
Чтобы прочитать этот блог, вы используете обмен ключами Диффи Хеллмана или когда мы используем наш телефон, чтобы использовать что-либо, когда он подключается к серверу, он использует обмен ключами Диффи Хеллмана, и как разработчик, мы должны знать, как эти вещи работают, верно? и не только на поверхностном уровне.🥹
Итак, подытоживая все, что мы узнали на данный момент, SSH использует как симметричное, так и асимметричное шифрование, поскольку асимметричное шифрование требует больше времени, и большинство соединений SSH используют симметричное шифрование, как мы обсуждали.
Идея заключается в том, что асимметричное шифрование используется для совместного использования только открытого ключа. Затем, наконец, используйте это ключевое симметричное шифрование для дальнейшего обмена данными, чтобы оно было быстрым.
После установления безопасного симметричного соединения. Сервер использует открытый ключ клиента и генерирует запрос, который передается клиенту для аутентификации. Если клиент успешно расшифровывает сообщение, клиент получает закрытый ключ, необходимый для подключения, и сеанс, наконец, начинается.
Во всей этой связи снова возникает одна проблема. Что, если третья сторона попытается действовать как клиент или сервер и изменить или изменить данные, если они каким-то образом убедит клиента, что они являются хостом, или наоборот, они могут обменяться с ними ключами и информацией может течь через этого посредника.
Чтобы решить эту проблему, мы поговорим о том, что называется хешированием.
Хеширование
- Хэширование — это форма криптографии, используемая в SSH.
- Хеширование отличается от двух других обсуждаемых форм шифрования тем, что они никогда и нигде не предназначены для расшифровки.
- Они просто генерируют уникальное значение фиксированной длины для каждого полученного ввода.
- Они односторонние, т.е. если я хэширую
"Abhinav's Secret"
, он запустит какую-то функцию и очень быстро вернет какую-то тарабарщину, а хитрость в том, что мы понятия не имеем, как вернуть исходную строку.
Так чем же это полезно? Как мы упоминали ранее, SSH может безопасно передавать сообщения, но для предотвращения мошенничества со стороны третьих лиц мы можем использовать хэши для проверки подлинности информации, чтобы третья сторона не может смягчить или изменить информацию.
- Это делается с помощью чего-то под названием
Hash-based message authentication code (or HMAC)
.
Итак, суть в следующем:
- При использовании хеш-функции каждое передаваемое сообщение должно содержать нечто, называемое
MAC
. - Этот
MAC
представляет собой хэш, сгенерированный с использованием комбинации симметричного ключа, порядкового номера пакета и содержимого сообщения, которое мы отправляем.MAC = Symmetric Key + Packet Sequence Number + Message
Когда узел инициирует сеанс, его порядковый номер пакета является случайным числом. - И затем этот MAC отправляется получателю.
Давайте рассмотрим пример,
- Допустим, мы отправляем сообщение, т.е.
"Abhinav's Secret"
на хост. - Мы запускаем хеш-функцию для комбинации симметричного ключа + порядковый номер пакета + наше сообщение, т.е.
"Abhinav's Secret"
, который выводит тарабарщину, т.е."f#er*fgfgdg#%Y#423"
, который мы называем MAC. - Теперь мы отправляем этот MAC-адрес напрямую хосту.
- Теперь, когда хост получает этот Mac, он может сравнить полученный MAC-адрес с созданным MAC-адресом самостоятельно.
- Поскольку он имеет ту же информацию, т.е. они могут использовать свой собственный симметричный ключ, такой же, как у клиента, они могут использовать порядковый номер пакета, который они оба знают, а затем, поскольку это сообщение было отправлено с использованием SSH, они оба также получают это сообщение.
- И если у обоих вся информация похожа друг на друга, то MAC будет точно таким же, т.е.
"f#er*fgfgdg#%Y#423"
. - Таким образом, мы избежим любого изменения или изменения данных, так как если каким-либо образом сообщение, т. Е.
"Abhinav's Secret"
, было изменено даже на одну букву или произошла заглавная буква, весь хэш будет совершенно другим. - И это характеристика хеш-функций: если мы изменим какую-то одну вещь, независимо от того, насколько похожими могут быть входные данные, изменится весь хэш.
Аутентификация
- Тем не менее, остается одна часть — аутентификация пользователя. Мы хотим убедиться, что даже те, кто пытается связаться с сервером, имеют к нему надлежащий доступ.
- Теперь есть два способа аутентификации пользователя.
- Первый — это использование пароля, но это не самый предпочтительный подход. Почему? Поскольку проблема с паролями заключается в том, что вы можете просто использовать бота и переборщить его, то это не лучший способ защитить сервер с его помощью. Так что может быть лучшим вариантом?
- Лучший способ аутентификации — использовать сам SSH, мы можем сгенерировать пару ключей ssh (открытый и закрытый ключи) с помощью
ssh-agents
и сохранить их в нашем файле.ssh
в корне. Затем добавьте открытый ключ (оканчивающийся на .pub) в настройки учетной записи сервера.
Чтобы лучше понять часть аутентификации, я прилагаю несколько ресурсов: docs.github.com/en/authentication/connectin..
inmotionhosting.com/support/server/ ssh/как-..
Вау! Это было много информации! 😳 Но глубоко разбираться в вещах и в том, как они работают, приятно!
Заключение
Итак, давайте подведем итоги; мы говорили об обмене ключами Диффи-Хеллмана (асимметричное шифрование) для совместного использования симметричного ключа, с которым мы можем общаться, а также проверять, подвергается ли отправляемая информация какой-либо третьей стороне с использованием хэширования. Затем мы аутентифицируем пользователя по самому SSH, и тот, кто даже пытается связаться с сервером, имеет к нему доступ.
Вот и все! Теперь вы (надеюсь🤞) понимаете, зачем нам нужен SSH и как он работает! 🥳
Эта статья была написана Абхинав Патель. Он является разработчиком Javascript с опытом работы более двух лет, постоянно работает над созданием отличных продуктов, а также учится и делится полученными знаниями, связанными с лучшими отраслевыми практиками и глубокими концепциями разработки программного обеспечения.