SSH («Secure Socket Shell» или «Безопасная оболочка сокета») — это защищенный сетевой протокол, с помощью которого можно безопасно подключаться к удаленным серверам и выполнять произвольные команды.
Говоря проще, SSH предоставляет защищенную (зашифрованную и аутентифицированную) оболочку командной строки для взаимодействия нескольких удаленных хостов друг с другом.
Таким образом с помощью SSH можно выполнять консольные команды на удаленной машине так, как если бы они вводились на локальной машине.
По этой причине SSH-протокол идеально подходит для управления обширной сетевой инфраструктурой.
Соответственно, в момент SSH-соединения существует две стороны:
-
Сервер. Это постоянно работающий демон, размещенный на удаленной машине, который прослушивает 22 порт и обрабатывает команды от авторизованных пользователей.
-
Клиент. Это утилита, запущенная на локальной машине, через которую выполняется подключение и отправка консольных команд удаленному серверу.
В этом руководстве мы разберем основы устройства SSH-соединения, а также настроим клиент и сервер таким образом, чтобы они могли выполнять безопасное общение друг с другом с использованием SSH-ключей.
Все показанные в этом руководстве примеры запускаются на облачном сервере Timeweb Cloud под управлением операционной системы Ubuntu 22.04.
Установка SSH
В операционных системах на базе Linux существует бесплатная утилита для работы с SSH-протоколом — OpenSSH. С помощью нее можно создавать как SSH-клиенты, так и SSH-серверы.
В некоторых дистрибутивах OpenSSH по умолчанию отсутствует, поэтому ее потребуется установить вручную. Для этого сперва необходимо обновить список актуальных репозиториев пакетного менеджера APT:
После чего выполнить установку OpenSSH:
Далее можно проверить возможность совершать SSH-подключения:
Если SSH присутствует в системе, то в консольном терминале появится короткая справка по доступных командам:
Для проверки, активен ли SSH-сервер, можно попытаться выполнить подключение по SSH к локальному хосту:
Если сервер запущен, то в консольном терминале появится сообщение, требующее ввести root-пароль:
Либо можно запросить статус SSH-службы:
Если сервер активен, то в терминале появится соответствующее сообщение со статусом состояния «Active»:
Создание SSH-ключа
В SSH-протоколе существует несколько способов авторизации (аутентификации):
|
Способ |
Настройка |
Авторизация |
|
Пароль |
Не требуется |
Ввод пароля |
|
SSH-ключ |
Требуется генерация SSH-ключа и копирование открытой части на сервер |
Ввод фразы-пароля или без ввода |
В этом руководстве пойдет речь о более эффективном и безопасном способе авторизации — с помощью SSH-ключа.
Устройство SSH-ключа
Ключ для SSH-соединения на самом деле представляет собой пару ключей (если быть точнее, то пару частей одного ключа), связанных между собой алгоритмически:
-
Открытый (Публичный). Хранится на сервере. Используется для шифрования сообщений и аутентификации.
-
Закрытый (Приватный). Хранится на клиенте в защищенном виде. Никому не показывается и никому не передается. Компрометация этого ключа может привести к взлому.
Определенные сочетания использования открытого и закрытого ключа позволяет шифровать данные и безопасно их передавать от одного хоста к другому. Именно это и является ключевой особенностью протокола SSH.
Генерация SSH-ключа
SSH-ключ генерируется на локальном компьютере с помощью специальной утилиты — keygen (генератор ключей). По умолчанию она генерирует пару 2048-битных ключей основе криптографического алгоритма RSA.
В большинстве операционных систем (Windows, Linux, macOS) процесс генерации ключа идентичен, поэтому его можно запустить одной и той же командой:
В консоли появится сообщение о начале генерации открытого и закрытого ключей:
Далее терминал предложит ввести путь, по которому необходимо сохранить сгенерированные ключи. Указание пути можно пропустить — в этом случае ключи окажутся в стандартной директории /root/.ssh:
Далее терминал попросит два раза ввести фразу-пароль, которая станет криптографической частью будущего SSH-ключа:
Однако ввод фразы-пароля можно пропустить, нажав два раза Enter. В этом случае в будущем не придется вводить фразу-пароль при каждом подключении по SSH.
После этого консольный терминал сообщит об успешном создании SSH-ключа и покажет дополнительную информацию о нем:
Таким образом, мы получили открытый и закрытый ключи, которые можно использовать для аутентификации по SSH-соединению.
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Добавление SSH-ключа
Чтобы локальная машина, на которой размещен сгенерированный SSH-ключ, могла автоматически авторизовываться на удаленной машине, открытую часть ключа нужно отправить на сервер. Есть несколько способов, как это сделать.
Способ 1. Через панель управления
Чтобы добавить открытую часть SSH-ключа на облачный сервер через панель управления Timeweb Cloud, необходимо:
-
Перейти во вкладку «Доступ» на странице управления облачным сервером.
-
Найти раздел «SSH-ключи» и нажать на кнопку «Изменить».
-
На открывшейся странице кликнуть по кнопке «Загрузить новый ключ».
-
Открытую часть ключа вставить в специальное текстовое поле для ключа и нажать на кнопку «Добавить».
При этом поле с названием ключа заполнится автоматически на основе содержимого самого ключа.

Страница настроек доступа в панели управления облачным сервером Timeweb Cloud
Если на локальном компьютере вы используете операционную систему на базе Linux, то открытый ключ можно найти в следующем файле:
Если же локальный компьютер управляется операционной системой Windows, то открытый ключ размещается в этом файле:
При этом вместо слова ПОЛЬЗОВАТЕЛЬ указывается имя пользователя на локальной машине.
Сам открытый ключ выглядит примерно так:
Обратите внимание на его завершение:
Оно содержит полное имя локальной машины, которое также является названием ключа в панели управления Timeweb Cloud.

Всплывающее окно для добавления открытого SSH-ключа в панели управления облачным сервером Timeweb Cloud
Способ 2. Через утилиту ssh-copy-id
Более классический, но менее наглядный способ добавления открытого ключа на удаленную машину — утилита ssh-copy-id, которая являются частью пакета OpenSSH и работает через консольный терминал.
Схема команды, которая копирует открытый ключ на удаленную машину, выглядит следующим образом:
При этом:
-
ПОЛЬЗОВАТЕЛЬ. Имя системного пользователя на удаленной машине. -
ХОСТ. IP-адрес удаленной машины.
Таким образом, команда может выглядеть так:
При первом выполнении команды в консольном терминале появится сообщение об установлении соединения с новым хостом:
Чтобы продолжить, в консольный терминал необходимо ввести yes. Далее появится сообщение о поиске ранее сгенерированного SSH-ключа (как открытого, так и закрытого) на локальной машине:
Когда ключ будет найден, консольный терминал попросит ввести пароль пользователя, под именем которого выполняется авторизация на удаленной машине:
После успешной авторизации терминал сообщит о том, что ключ был добавлен в систему на удаленной машине:
Способ 3. Через ручное копирование
Если на удаленной машине есть пользователь с паролем (например, root), то можно выполнить ручное копирование SSH-ключа от его имени.
Для этого нужно выполнить несколько действий:
-
Открыть файл с открытым ключом (
/root/.ssh/id_rsa.pub) и скопировать его содержимое.
-
Выполнить SSH-подключение к удаленной машине и авторизоваться по паролю.
-
Создать каталог
/root/.sshна удаленной машине, если он еще не существует.
-
Создать файл
/root/.ssh/authorized_keysи вставить в него ранее скопированный ключ.
Необходимую последовательность действий можно записать в виде одной лаконичной команды:
При этом:
-
Символ
|используется для перенаправления потоков ввода и вывода.
-
Символ
>>используется для дополнения содержимого файла, а не его полной перезаписи.
После выполнения команды в консольном терминале появится сообщение о новом SSH-подключении и вопросом о необходимости его продолжения:
Если ввести утвердительный ответ yes, консольный терминал попросит ввести пароль пользователя, под которым выполняется подключение к удаленной машине:
Если копирование SSH-ключа прошло успешно, то в консольном терминале ничего не появится.
Обратите внимание, что после ручного копирования открытого ключа консольный терминал останется на локальной машине, а не переключится на удаленную.
Аутентификация по SSH-ключу
После добавления SSH-ключа на удаленную машину любым из описанных выше способов, к ней можно выполнить подключение:
Слово IP_АДРЕС нужно заменить на IP-адрес удаленной машины, к которой выполняется подключение.
Таким образом, команда подключения может выглядеть так:
При этом, если файл с закрытым SSH-ключом на локальной машине был сохранен не в каталоге по умолчанию (/root/.ssh/id_rsa), то к команде подключения нужно добавить дополнительный флаг -i, явно указывающий на файл с закрытым ключом:
Далее есть три варианта развития событий:
-
Ввод пароля. Если SSH-ключ не был добавлен на удаленную машину, то консольный терминал потребует ввести пароль пользователя, под именем которого выполняется аутентификация на сервере.
-
Ввод фразы-пароля. Если SSH-ключ был добавлен на удаленную машину и во время его генерации была указана фраза-пароль, то консольный терминал потребует ее ввести.
-
Без ввода. Если SSH-ключ был добавлен на удаленную машину и во время его генерации фраза-пароль не указывалась, то произойдет мгновенная аутентификация без требования ввести какие-либо дополнительные данные.
Когда аутентификация пройдена, на удаленной машине можно посмотреть список авторизованных SSH-ключей, записанных в соответствующим файле:
В консольном терминале появится ранее добавленный открытый SSH-ключ.
Внутри этого файла все ключи последовательно записаны сплошным текстом без разделителей. Таким образом удаленная машина аутентифицирует пользователей на основе тех открытых ключей, которые находятся в файле /root/.ssh/authorized_keys.
Очистка этого файла приведет к необходимости повторного добавления открытого ключа на удаленную машину.
Поэтому всегда остается возможность вручную добавить нового авторизованного пользователя, дописав его открытый SSH-ключ в конец файла authorized_keys.
Разверните свой Linux VDS в Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
Аутентификация по SSH-ключу является более простой, быстрой и безопасной альтернативой классической авторизации по паролю. Однако она требует предварительной подготовки:
-
Генерация на локальной машине пары SSH-ключей — открытого (публичного) и закрытого (приватного).
-
Добавление открытого ключа на удаленную машину в специальный файл
/root/.ssh/authorized_keys.
Существует несколько способов, с помощью которых можно разместить открытый SSH-ключ на удаленной машине:
-
Способ 1. Через графический интерфейс панели управления Timeweb Cloud.
-
Способ 2. Через специальную консольную утилиту
ssh-copy-id.
-
Способ 3. Через ручное копирование.
При этом аутентификация по SSH-ключу в качестве дополнительной меры безопасности поддерживает указание фразы-пароля, который вводится в консольный терминал в момент подключения.
