Рубріки: Теория

Что такое SSH протокол и как его использовать?

Сергій Бондаренко

Что такое SSH

Хотя протокол SSH и расшифровывается как Secure Shell, но по сути не является шеллом. SSH – это протокол безопасного доступа к удаленным системам. В основном SSH используется для доступа к серверам, для удаленного доступа к консоли, к терминалу, к командному интерпретатору удаленной машины (скорее всего ПК под управлением Linux, но может быть и другое сетевое оборудование или даже, устройство с Windows). SSH применяется разными способами, например, через этот протокол можно монтировать различные удаленные файловые системы, пробрасывать порты и т.д.  SSH – это де-факто стандарт доступа к удаленным Linux-машинам. 

Принцип работа ssh

История создания протокола

SSH была разработана еще в далеком 1995 году финским инженером Тату Юлёненом из Технологического университета в Хельсинки.

Тату Юлёнен

Он работал над созданием механизма защиты, который бы служил альтернативой TELNET, FTP и rsh, которые не могли на то время гарантировать безопасную аутентификацию пользователя в сети (для написания первой версии использовалась библиотека libgmp). Только к концу 1995 года общее число пользователей SSH-1 выросло уже до двадцати тысяч в пятидесяти странах, а к 2000 году это количество увеличилось до двух миллионов человек. В 2006 году протокол прошел обновление, а его версия SSH-2 стала поддерживать обмен ключами Диффи-Хеллмана (улучшенная защищенность), проверка происходила с помощью MAC-подписей. Вторая версия имела совместимость с SSH-1. Протокол SSH-2 мог  запускать любое число сеансов оболочки через одно соединение SSH.

На данный момент существуют две реализации SSH, причем с практически одинаковым набором команд: частная коммерческая и бесплатная свободная OpenSSH. Подавляющее число компьютеров сети Интернет использует именно OpenSSH. Коммерческая реализация протокола создается SSH Communications Security, и также является бесплатной для некоммерческого использования. Первая версия протокола уже давно не поддерживается, в виду большого количества обнаруженных в ней уязвимостей.

Как протокол работает

Данный протокол использует клиент-серверную архитектуру, поэтому SSH состоит из двух частей – клиентской и серверной. Обычный SSH-сервер управляется клиентской частью, принимая входящие подключения по 22 порту (по умолчанию). Клиентская часть может быть реализована под разные платформы: десктопные, мобильные, серверные и пр. На сервере, к которому вы подключаетесь, должен работать daemon sshd. 

Daemon SSH

Для подключения по SSH необходимо выполнить в терминале команду

ssh username@remote_host -p port

Например, для подключения к серверу 51.306.148.242 в аккаунт serge нужно ввести

ssh serge@51.306.148.242

В данном случае порт не указываем, он берется по умолчанию стандартный – 22.

Тоннелирование

SSH-соединение может обеспечивать тоннелирование данных, например, для пересылки файлов. Особенность этой функции состоит в том, что незашифрованный трафик любого протокола шифруется на одной стороне SSH-тоннеля, а расшифровывается на другой стороне соединения. С практической точки зрения это может быть реализовано либо с помощью Socks-прокси, либо через через приложения поддерживающие SSH-тоннель, либо через VPN-тоннель. Если приложение работает с одним определенным сервером, можно настроить SSH-клиент таким образом, чтобы он пропускал через SSH-тоннель TCP-соединения, приходящие на определенный TCP-порт машины, на которой запущен SSH-клиент. Например, для клиентов Jabber используется  порт 443. Так, чтобы настроить подключение к серверу Jabber через SSH-тоннелирование, SSH-клиент настраивается на перенаправление подключений с любого порта локальной машины (например, из порта 4430) на удаленный сервер (например , jabber.example.com и порт 443):

$ ssh -L 4430:jabber.example.com:443 какой-то_хост

Главный плюс SSH – в его безопасности и распространенности. Его можно найти практически на любой машине с Linux.  Если вы установили, скажем, стандартную Ubuntu, там уже будет установлен SSH, ваш основной способ общения с этой машиной, будь то виртуальная машина или физическое железо. На любом Linux, как правило, уже предустановлен клиент SSH «из коробки», соответственно вы выбираете сами каким командным интерпретатором пользоваться и как это внешне будет выглядеть. Если использовать компьютер под управлением MacOS, то там можно использовать для клиента SSH стандартный UNIX Terminal или одну из многочисленных надстроек. Так, например, можно порекомендовать использовать для протокола SSH программу iTerm2.

iTerm2 для MacOS

Для Windows есть несколько клиентов:

  • Putty (https://www.putty.org/) – маленькая, легкая бесплатная программа
  • Xshell (https://www.netsarang.com/en/xshell/) – платный клиент (тем не менее, свободен для некоммерческого использования), который рассчитан на более серьезное использование. Данную программу можно рекомендовать тем, кто работает с большим количеством серверов (скажем, более десяти).
  • Xshell

  • OpenSSH – встроенный клиент, который появился в Windows 10.
  • Cygwin (https://cygwin.com/) – еще один клиент под Windows, главная особенность которого состоит в том, что он поддерживает команды Linux. Например, в этой программе SSL-сертификаты создаются точно так же, как и в Linux. Установив это приложение вы можете использовать SSH из обычной командной строки, через Power Shell и пр.

Интерфейс Pytty

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

SSH и ключи

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

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

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

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

Так работают ключи SSH

Генерация ключей

Процедура генерации пары ключей достаточно простая. Ее можно выполнить при помощи консольной команды ssh-keygen, которую поддерживают все SSH-клиенты. 

ssh-keygen -t rsa

Сгенерированные ключи будут сохранены в файлы ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.

Однако, в нашем примере мы используем программу PuTTY Key Generator, которая использует свой формат хранения приватного ключа (при необходимости, он легко конвертируется). Указав внизу, в правом нижнем углу окна, длину ключа, а также алгоритм шифрования, нажимаем Generate и ждем, параллельно двигая мышью, чтобы создать “случайность” для ключа. Публичный ключ отображается сразу, его можно копировать через буфер обмена.

Генерация ключа в Putty

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

На сервере необходимо переместиться в домашнюю папку пользователя и создать там папку .SSH:

ujin@ubuntu:~$ mkdir .ssh

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

ujin@ubuntu:~$ chmod 700 .ssh

ujin@ubuntu:~$  vim .ssh/autorized_keys

После чего копируем содержимое ключа через буфер обмена. Затем мы должны исправить права на чтение созданного файла:

ujin@ubuntu:~$  chmod 600 .ssh/autorized_keys

Теперь машина готова к приему нашего приватного ключа в качестве механизма авторизации.

Заключение

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

 

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023