Содержание
Хотя протокол 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 есть несколько клиентов:
Xshell
Интерфейс Pytty
Важным элементом безопасности SSH является генерация уникального отпечатка fingerprint при каждой установке open SSH сервера. Это позволяет идентифицировать сервер и защититься от его подмены. Например, когда физически сервер выключен, кто-то может взять его IP адрес, прослушать все подключения и получить все пароли. В данном же случае вы получаете предупреждение о том, что подлинность fingerprint нарушена.
Для максимальной безопасности обычно принято отказываться от паролей и использовать практику ключей. Суть этого состоит в том, что генерируется два ключа, один из которых является приватным, он хранится только у вас, а второй ключ – публичный. Поскольку второй ключ не представляет ценности без первой части, его можно публиковать и передавать. Если кто-то хочет зашифровать данные, он использует публичный ключ. При этом, даже тот, кто зашифровал информацию, открыть ее без приватного ключа не сможет. Также это используется и в обратную сторону – для гарантирования цифровой подписи. Человек может зашифровать данные, используя свой приватный ключ – любой пользователь сможет расшифровать данные, пользуясь публичным ключом. Таким образом можно удостовериться, что отправитель секретной информации владеет второй частью ключа, что является гарантией цифровой подписи.
Использование ключей имеет ряд преимуществ, связанных с безопасностью. В первую очередь, их достаточно тяжело взломать. При достаточной длине ключа, взломать его методом перебора (атака методом брутфорс) или подбора по словарю – задача практически невыполнимая.
Во-вторых, при использовании ключей на сервере не хранится никакой приватной информации. При использовании пароля, например, на сервере остается парольный хэш, который, в случае доступа к злоумышленникам, представляет собой потенциальную угрозу безопасности и уязвимость.
Кроме того, использование ключей дает ряд дополнительных преимуществ. Например, в обычном случае, когда создается учетная запись на сервере, генерируется временный пароль, который необходимо менять при первой авторизации. Соответственно, этот временный пароль нужно как-то передавать, что не очень хорошо. С ключами все намного проще – вы передаете свой публичный ключ, его прописывают на нужные сервера. При этом, имеется возможность назначить несколько ключей одному пользователю. Это намного удобнее и безопаснее, чем при использовании паролей.
Так работают ключи 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 и работать из командной строки.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…