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

Что такое протокол SSH
SSH (Secure Shell) — это протокол для безопасного удаленного подключения к другому компьютеру через интернет. То есть без него у нас бы не было возможности удаленно подключаться к любым устройствам и настраивать софт. А главное — делать это безопасно и без утечки информации.
Устроено подключение по SSH так:
При подключении используются два ключа — открытый (публичный) и закрытый (приватный).
Публичный ключ хранится на сервере и шифрует данные.
Приватный ключ остается у вас — только с его помощью можно расшифровать информацию.
Благодаря этому даже при подключении через публичные сети,например, в кафе или аэропорту, ваши данные остаются защищенными.
Чтобы на практике показать, как работает SSH-протокол, можно провести аналогию с депозитными ячейками в банке: ячейка — это сервер, а ее содержимое — информация, которую вы храните или хотите передать. Для работы с ячейкой нужны два ключа — один у сотрудника банка, один ваш. То есть даже если кто-то завладеет банковским ключом, без вашего он бесполезен. А если на ваш ключ установлен пароль, то даже в случае его похищения, злоумышленник не сможет вскрыть ячейку.
Кстати, для удобного управления публичными SSH-ключами в Cloud.ru Evolution есть отдельный сервис, которым может воспользоваться любой владелец виртуальной машины в облаке.


Как и зачем разработали SSH
Первую версию SSH в 1995 году разработал финский ученый Тату Юлонен — сразу после того, как сеть Хельсинкского университета подверглась крупной атаке. До этого для доступа к серверам использовали протокол Telnet. Он передавал действия, события (логи) пользователя и пароль через публичную сеть в открытом виде. Однако с появлением SSH удаленный доступ стал куда безопаснее, а интерес потребителей к новому сетевому протоколу возрос. С ним администраторы и разработчики смогли безопасно управлять серверами и передавать данные.
Вот какие преимущества выгодно выделяли SSH на фоне более «древних» аналогов:

Впрочем, уже в 1999 году первоначальный код SSH перестал работать, и появились две альтернативы: коммерческий продукт SSH-2 и бесплатный OpenSSH, который и сейчас используется в большинстве операционных систем.
Сегодня SSH применяется для:
управления облачными серверами;
безопасной передачи файлов;
работы с git-репозиториями;
автоматизации задач через скрипты.
Зачем это нужно? Представьте, что центральный офис вашей компании находится в Казани. А у филиала в Нижнем Новгороде сломался сайт. Через SSH-протокол технический специалист из Казани может:
Мгновенно подключиться к серверу в Нижнем Новгороде, даже если сервер находится в закрытой локальной сети филиала.
Найти и исправить проблему — проверить логи ошибок, перезапустить веб-сервер или обновить конфигурацию, используя команды.
Экстренно обновить файлы сайта, если требуется срочное исправление.
Настроить автоматическое резервное копирование, чтобы избежать проблем в будущем.
Запретить доступ злоумышленникам, если проблема была вызвана атакой.
Все это можно сделать за 10-15 минут без необходимости отправлять специалиста в командировку или просить сотрудников филиала выполнять сложные инструкции по телефону.

Функциональные возможности SSH-протокола обширны, но у него есть свои ограничения. Поэтому подробнее поговорим о преимуществах и недостатках, которые стоит учитывать при его использовании:
Плюсы
Защита от подделки IP-адресов и манипулирования данными на маршрутизаторах в сети. SSH защищает от спуфинга и манипуляций с данными, благодаря криптографическим методам: проверке подлинности, шифрованию данных и обеспечению их целостности.
Предотвращение DNS-спуфинга. То есть кибератак такого типа, при которых злоумышленники подменяют адреса веб-сайтов в системе, отвечающей за преобразование доменных имен (например, google.com), в IP-адреса. В результате человек, вводящий веб-адрес, может попасть на поддельный сайт, даже не подозревая об этом, а злоумышленники получат доступ к его личной информации.
Защита от подслушивания и прослушивания передаваемых данных за счет их шифрования и сохранения целостности, благодаря вычислению хэша при их передаче, а также аутентификации пользователей.
Минусы
Несовместимость с некоторыми типами соединений: SSH работает только с одним типом интернет-соединений — TCP. Это значит, что если приложение использует другой тип соединений (UDP), то SSH не сможет его защитить. Например, UDP-соединения используют видеочаты, потоковые сервисы, онлайн-игры.
Риск неправильной настройки. Если SSH настроен неправильно, например, мы используем простые пароли или забываем установить важные обновления, это может дать мошенникам шанс получить доступ к нашим данным.
Сложность установки. Чтобы установить и правильно настроить SSH, нужно обладать определенными техническими знаниями. Без таких знаний можно легко ошибиться, и это сделает защиту менее надежной.
Чтобы полноценно использовать все возможности протокола и избежать проблем с настройкой, давайте подробно рассмотрим механизм его работы и особенности взаимодействия с разными операционными системами (ОС).
Как работает SSH
SSH работает по клиент-серверной модели, обеспечивая защищенный канал между двумя компьютерами через незащищенные сети. Разберем процесс:
Установка соединения (Handshake)
Когда вы вводите команду ssh user@example.com, происходит:
TCP-подключение, гарантирующее доставку всех пакетов данных Клиент устанавливает соединение с сервером через порт 22 (по умолчанию).
Обмен версиями протокола. Клиент и сервер согласовывают версию SSH (рекомендуется SSH-2).

Обмен ключами и шифрование
После установки TCP-соединения:
Сервер отправляет свой публичный ключ. Клиент проверяет его по отпечатку (fingerprint). При первом подключении ключ сохраняется в папке ~/.ssh/known_hosts.
Создание сессионного ключа. Клиент и сервер используют алгоритм Диффи-Хеллмана. Генерируется временный симметричный ключ для текущей сессии.
Симметричный ключ использует один и тот же ключ для шифрования и дешифрования, а асимметричный сразу пару — публичный и приватный.
Аутентификация пользователя
Система предлагает 2 основных способа аутентификации:
По паролю. Пароль передается в зашифрованном виде. Этот способ менее безопасен, но более прост в настройке.
По ключам. Клиент использует приватный ключ (id_rsa). Сервер проверяет соответствие публичному ключу (authorized_keys).
Рабочая сессия
После успешной аутентификации создается зашифрованный канал, все команды и данные передаются через него. При этом можно использовать:
Интерактивную оболочку — для полного доступа к командной строке удаленного сервера. Чаще всего такой доступ необходим для срочного исправления проблем на сервере, обновления ПО на всех корпоративных серверах и проверки логов в режиме реального времени.
Передачу файлов (SCP/SFTP) — для копирования файлов с локального компьютера на сервер или скачивания с сервера. Эта возможность нужна, когда нужно разместить на сайтах какие-нибудь обновления, безопасно передать финансовые отчеты или сделать резервное копирование важных данных.
Проброс портов (tunneling) — для создания безопасного туннеля для доступа к закрытым сервисам. Эту технологию используют для безопасной удаленной работы с внутренними CRM/ERP-системами, доступа к тестовым серверам без их выноса в публичный контур или просто для защиты данных при подключении через общедоступные сети, например, в отеле или кафе.
Базовые команды SSH
Для управления Secure Shell существуют множество команд, рассмотрим самые базовые:

Процессы установки и использования Secure Shell немного отличаются в в разных операционных системах и их версиях. Давайте рассмотрим подробно, как это происходит процесс на наиболее популярных ОС.
SSH в Windows
Если у вас Windows 10 версии 1809 и выше, то OpenSSH уже встроен в систему, дополнительно ничего делать не нужно. Если же версия ОС старше, то потребуется установить OpenSSH-клиент.
Как установить клиентскую часть OpenSSH в Windows
Есть два способа установки клиента: через настройки Windows или через PowerShell.
Установка через Windows
Откройте Настройки → Приложения → Приложения и компоненты. Нажмите Дополнительные компоненты → Добавить компонент. Найдите Клиент OpenSSH и установите его.
Установка через PowerShell
Введите команду Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0. И проверьте, установлена ли программа, введя в командную строку Get-Command ssh.

Подключение к серверу через интерактивные оболочки (CMD и PowerShell)
Для начала интерактивную оболочку в поисковой строке компьютера, который планируете подключить к удаленному серверу CMD или PowerShell. В открывшееся окно скопируйте текст ssh<user>@<ip> и замените IP-адрес и имя пользователя. Нажмите Enter и введите пароль пользователя root.

Здесь мы рассматриваем только подключение к удаленному серверу. Если вас интересуют возможности удаленного управления Windows-серверами через PowerShell с использованием SSH как транспортного протокола, то это тема для отдельной статьи. PowerShell Remoting требует отдельной настройки и рассматривается в продвинутых руководствах.
Как подключиться по SSH с помощью PuTTY
PuTTY — это бесплатная программа с открытым исходным кодом. Она нужна для удобного и быстрого подключения к другим компьютерам по протоколам SSH, Telnet и другим. ПО есть в бесплатном доступе на официальном сайте.
Как подключиться с помощью PuTTY:
Загрузите программу на устройство и перейдите к настройкам. Нам нужны две вкладки: SSH и Session.
Во вкладке SSH проверьте, чтобы галочка стояла возле второй версии SSH. Во вкладке Session введите IP-адрес удаленного ПК. Если будете использовать нестандартный номер порта, также введите его. По умолчанию стоит порт 22.
После выберите тип соединения, а чтобы быстрее заходить в SSH и подключаться к удаленному ПК создайте пресет. Выберите нужные параметры закрытия окна при выходе.
Нажмите Open и в открытом окне введите логин и пароль для подключения к серверу. Готово.

SSH в Linux
В зависимости от версии Linux для загрузки SSH нужны разные наборы команд. Рассмотрим варианты.
Загрузка на Ubuntu. Зайдите в служебную строку быстрой комбинацией Ctrl + Alt + T. Затем получите доступ к новым данным и обновите репозиторий командой sudo apt update. Загрузите сетевой протокол командой sudo apt-get install ssh. Следующий шаг — загрузите OpenSSH и добавьте пакет SSH-сервера в список автозагрузки, для этого введите в терминал sudo systemctl enable sshd. Настойки будут установлены по умолчанию. Чтобы проверить, успешно ли прошла установка, наберите в терминале sudo systemctl status sshd.
Загрузка на CentOS. Сперва загрузите OpenSSH. Затем настройте SSH-сервер для автоматического запуска при загрузке системы командами sudo systemctl enable sshd и sudo systemctl start sshd. Успешность установки можно проверить командой sudo systemctl status ssh.
Загрузку софта на основе APT выполните через команду apt -y install openssh-server.
Загрузка софта на основе RPM произведите с помощью команд для пакетного менеджера YUM — yum -y install openssh-serveropenssh-server или для пакетного менеджера DNF — dnf -y install openssh-server.
Загрузку софта на основе Pacman выполните командой pacman -S openssh.
Установить подсоединение SSH в Linux можно и с помощью служебного меню. Для этого нужно нажать Ctrl+Alt+T, после подключиться командой ssh root@IP, указав свое имя и IP-адрес своего сервера. Потом потребуется ввести пароль и добавить новое устройство в список доверенных устройств — он добавляется в файл по пути ~/.ssh/known_hosts, где хранится список доверенных устройств.
Чтобы сгенерировать новые SSH-ключи, нужно использовать команду ssh-keygen. Изначально ключи хранятся в папке ~/.ssh/. По желанию можно ввести пароль для дополнительного шифрования ключа на диске.
Подключение не работает: что делать
При подключении и настройке SSH у вас могут возникнуть сложности. Разберемся с типовыми проблемами соединения и тем, как их устранить.
Если вы видите надпись «Connection Refused», то следует проверить:
Находится ли клиент в вашей системе. Впишите команду ssh в окне терминала, и если увидите ответ «command not found», значит, нужно установить клиент OpenSSH.
Правильно ли вы написали IP-адрес и указали номер порта. IP можно проверить командой ping <ip>. Если используете нестандартный порт, то нужно добавить аргумент -p к команде (ssh -p <port> <user>@<IP>).
Работает ли служба SSH или ее нужно включить. Чтобы проверить статус, введите sudo systemctl status sshd. А чтобы включить саму службу, введите sudo systemctl start sshd.
Доступен ли SSH на удаленном сервере или его нужно установить.
Не ограничивает ли брандмауэр SSH-соединения или нужно настроить разрешение.
Кстати, учтите, что в Linux Debian для суперпользователя root подключение к серверу по SSH не разрешено, при авторизации будет всплывать уведомление «access denied».
Заключение
Вот мы и разобрались, что SSH — это криптографический сетевой протокол. Он предназначен для удаленного доступа к устройствам через безопасное соединение. Надежное шифрование обеспечивает конфиденциальность и помогает безопасно туннелировать небезопасные приложения, например, SMTP, IMAP, POP3 и CVS.