Сегодня все чаще в работе используются серверы с установленной операционной системой семейства Linux. Для возможности удаленного доступа используется протокол прикладного уровня под названием SSH. В данной статье мы рассмотрим использование протокола SSH для подключения к удаленным Linux-серверам, а также настройку некоторых параметров с целью улучшения безопасности.
Подключение по SSH можно использовать для абсолютно любого дистрибутива, так как протокол SSH используется по умолчанию практически во всех современных дистрибутивах Unix и Linux.
В качестве примера вся конфигурация SSH, которая будет описана в данной статье, использовалась в дистрибутиве Ubuntu версии 22.04. Однако ее без проблем можно использовать в любых других дистрибутивах, включая Debian, CentOS, Astra Linux и т.д.
Технологии здесь. А вы с нами?
безопасно и с гарантией результата.
Предоставим грант до 1 000 000 ₽ на облачную
инфраструктуру и возьмем на себя весь процесс.
Способы подключения по протоколу SSH
Для подключения к серверам на Linux по протоколу SSH существует большое количество клиентских программ.
Среди самых известных программ для Windows можно выделить PuTTY, Bitvise SSH Client, SuperPuTTY, mRemoteNG, MobaXterm.
На macOS можно воспользоваться программой Termius или стандартной утилитой SSH, используя терминал.
Также можно использовать стандартный SSH-клиент (OpenSSH), который вызывается через командную строку (cmd) и присутствует в ОС семейства Windows: Windows 10, Windows 11 и Windows Server 2019.
Установка SSH на сервер
В большинстве случаев SSH уже предустановлен на сервере, и вы сразу сможете подключиться. Если же пакет SSH по каким-то причинам не установлен, то его необходимо установить при помощи одной из следующих команд (все команды представленные ниже необходимо выполнять от имени пользователя root или от обычного пользователя, но с правами sudo).
Для дистрибутивов на основе APT (Ubuntu, Debian, Linux Mint, Kali Linux, Astra Linux и другие) используйте команду:
Вместе с пакетом openssh-server также автоматически устанавливается пакет openssh-client, который представляет собой консольную утилиту SSH для подключения к удаленным серверам.
Синтаксис команды SSH
Стандартный синтаксис команды SSH выглядит следующим образом:
Например:
По умолчанию подключение происходит по 22 порту. Если же порт SSH сервера другой, то он указывается при помощи опции -p:
Конфигурационный файл SSH-сервера
Конфигурационный файл, который использует SSH-сервер, называется sshd_config и располагается в директории /etc/ssh. Не путайте файл SSH-сервера с файлом SSH-клиента — ssh_config. Далее в статье будет использоваться только файл сервера — sshd_config.
Подключение по SSH при помощи пароля
По умолчанию подключение по протоколу SSH осуществляется с помощью пароля при условии, что на этапе создания сервера не был добавлен SSH-ключ для подключения (о ключах для SSH и об их применении будет рассказано в следующей главе). В большинстве дистрибутивов Linux/Unix в конфигурации сервера SSH включена PAM-аутентификация. Это означает, что пользователь, присутствующий в операционной системе, может воспользоваться своими данными (логин и пароль) для входа по SSH. Данное условие работает, если у пользователя не используются опции nologin и noshell, что можно проверить можно посмотреть в файле /etc/passwd, и ему разрешен вход по SSH (будет показано далее в статье).
Для того чтобы подключиться по SSH при помощи пароля, достаточно знать адрес необходимого сервера, а также логин и пароль пользователя. Например:
После ввода команды выше появится приглашение к вводу пароля. Если пароль введен правильно, то вы попадете на сервер. Пароль необходимо вводить каждый раз при подключении.
Если вы подключаетесь к серверу в первый раз, то увидите сообщение от так называемого «отпечатка пальцев» (fingerprint):
Чтобы войти на сервер, необходимо ввести yes.
Fingerprint используется для повышения безопасности путем генерации уникального набора символов. Каждый раз при подключении к серверу ваше устройство, с которого осуществляется подключение, сравнивает ранее сгенерированную комбинацию. Если, например на сервере была переустановлена операционная система, был переустановлен SSH-сервер или же на текущем сетевом адресе произошла смена устройства, но при этом адрес остался прежним, то в таких случаях система будет предупреждать что отпечаток изменился по сравнению с первым подключением.
Использование паролей не является безопасным методом подключения, так как пароль можно попытаться подобрать. Наиболее безопасным методом аутентификации является использование SSH-ключей. О них речь пойдет в следующем разделе.
Подключение по SSH при помощи ключей
Более распространенным и более безопасным способом вместо использования паролей являются SSH-ключи.
В работе используются два типа ключей: открытый (public) и закрытый (private). Открытый ключ используется для шифрования и является публичным — если кто-то вдруг завладеет вашим открытым ключом, то ничего критичного не произойдет. В свою очередь закрытый ключ используется для расшифровки. Закрытый ключ должен храниться только у вас и не в коем случае не быть доступным для третьих лиц. Для использования ключей сначала их необходимо сгенерировать. Для генерации используется команда:
Для начала команда предложит вам выбрать директорию, в которую будут сохранены открытый и закрытый ключи. По умолчанию ключи хранятся в скрытой (символ точки) директории .ssh, которая в свою очередь будет создана в домашней директории того пользователя, из-под которого запущена команда ssh-keygen. В данном примере ключи будут сохранены в домашней директории пользователя alex а именно в /home/alex/.ssh. Также вы можете указать другой путь и директорию куда будут сохранены ключи. Чтобы оставить путь по умолчанию, достаточно нажать на клавишу Enter:
Далее программа предложит задать passphrase — пароль для ключа. Это обеспечит дополнительный уровень защиты. Если кто-то получит доступ к вашему ключу, то ему придется подбирать еще и пароль. Однако стоит заметить, что при использовании passphrase вам придется вводить ее каждый раз при новом подключении по аналогии с использованием паролей. Passphrase можно не использовать. Для этого достаточно при появлении фраз Enter passphrase (empty for no passphrase) и Enter same passphrase again нажать на клавишу Enter:
После этого ssh-keygen сообщит о том что ключи сгенерированы и сохранены в ранее указанной директории:
Проверим содержимое директории .ssh (/home/alex/.ssh):
Где:
id_rsa— закрытый ключid_rsa.pub— открытый ключ
Перед тем как подключаться к нужному хосту, необходимо скопировать открытый ключ на этот удаленный хост. Для этого в комплекте с OpenSSH поставляется утилита для копирования открытых ключей на удаленные серверы — ssh-copy-id. Синтаксис у команды следующий:
Предположим, нам необходимо подключиться к серверу с IP адресом 82.97.250.52 без пароля, только при помощи ключа. Для этого копируем ранее сгенерированный ключ на хост 82.97.250.52:
Так как мы впервые осуществляем подключение, то нам необходимо ввести yes:
При копировании ключа нам необходимо ввести пароль от учетной записи пользователя на удаленном хосте. Пароль необходимо вводить только один раз:
После этого ключ будет добавлен:
Теперь можно попробовать зайти на удаленный сервер:
Если пароль не был запрошен и вы смогли войти, то аутентификация по ключам успешно работает.
На удаленном хосте переданный открытый ключ был записан в файл authorized_keys, который находится в скрытой директории .ssh в домашней директории того пользователя, из-под которого осуществлялось подключение:
Запрет на подключение при помощи пароля
Так как использование паролей при подключении по SSH не является безопасным, то рекомендуется отключить данный метод аутентификации и оставить только вход по ключам.
Для этого откроем на редактирование конфигурационный файл SSH-сервера (sshd_config) при помощи любого текстового редактора:
Далее необходимо найти параметр PasswordAuthentication и изменить значение на no:
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
Будьте предельно осторожны при выключении аутентификации по паролю, не убедившись перед этим, что аутентификация по ключам корректно работает. Если вход по ключам не будет работать, а аутентификация по паролю будет выключена — вы не сможете попасть на сервер при помощи SSH. Для решения данной проблемы вы можете использовать веб-консоль которая находится в разделе «Консоль» в панели управления сервера:
Авторизуйтесь под необходимой учетной записью, далее верните значение параметра PasswordAuthentication в yes и перезапустите демон SSH.
Смена стандартного порта SSH
По умолчанию сервер SSH работает по 22 порту. Порт можно изменить. Для этого в файле sshd_config найдите строку Port. Раскомментируйте при необходимости (удалите символ решетки #) и задайте любой порт, который не занят на вашем сервере, в диапазоне от 0 до 65536 (кроме портов 0-1023, так как данный диапазон зарезервирован для популярных приложений).
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
Теперь при подключении используйте опцию -p, в которой будет задан новый порт, например:
Запрет на подключение по SSH пользователю root
По умолчанию в некоторых дистрибутивах разрешено подключение из-под учетной записи root. Так как root-пользователь обладает всеми привилегиями в системе и может выполнять многие опасные действия, то необходимо отключить вход для пользователя root.
Для этого в файле sshd_config найдите строку PermitRootLogin и задайте ей значение no:
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
Теперь при попытке входа от имени root-пользователя будет отображаться ошибка: Permission denied, please try again.
Разрешение/запрет на подключение по SSH определенным пользователям
Помимо отключения разрешения на вход для root-пользователя, вы также можете разрешать или запрещать подключение только для определенных пользователей. Для этого в конфигурационном файле sshd_config используются параметры AllowUsers и DenyUsers:
AllowUsersразрешает определённым пользователям подключение по SSH. Разрешить доступ можно как одному пользователю, так и нескольким сразу, для этого их необходимо перечислить через пробел. Предполагается, что пользователи, которым разрешено подключение, уже созданы в операционной системе.DenyUsersзапрещает определённым пользователям подключение по SSH. Запретить доступ можно как одному пользователю, так и нескольким сразу, для этого их необходимо перечислить через пробел. Предполагается, что пользователи которым запрещено подключение, уже созданы в операционной системе.
Например, разрешим доступ только для пользователей test и admin:
И запретим доступ для пользователей nginx и websrv:
Также разрешать и запрещать доступ можно и для групп:
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
Теперь пользователи, которым запрещен доступ, при попытке входа будут получать ошибку Permission denied, please try again.
Подготовили для вас выгодные тарифы на облачные серверы
477 ₽/мес
657 ₽/мес
Заключение
Протокол SSH является незаменимым средством для подключения к вашим удаленным серверам. Помимо встроенного шифрования, вы также можете гибко настраивать конфигурацию SSH-сервера с целью повышения защиты.
