Сегодня все чаще в работе используются серверы с установленной операционной системой семейства Linux. Для возможности удаленного доступа используется протокол прикладного уровня под названием SSH. В данной статье мы рассмотрим использование протокола SSH для подключения к удаленным Linux-серверам, а также настройку некоторых параметров с целью улучшения безопасности.
Подключение по SSH можно использовать для абсолютно любого дистрибутива, так как протокол SSH используется по умолчанию практически во всех современных дистрибутивах Unix и Linux.
В качестве примера вся конфигурация SSH, которая будет описана в данной статье, использовалась в дистрибутиве Ubuntu версии 22.04. Однако ее без проблем можно использовать в любых других дистрибутивах, включая Debian, CentOS, Astra Linux и т.д.
cloud
Для подключения к серверам на 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 по каким-то причинам не установлен, то его необходимо установить при помощи одной из следующих команд (все команды представленные ниже необходимо выполнять от имени пользователя root
или от обычного пользователя, но с правами sudo
).
APT
Для дистрибутивов на основе APT (Ubuntu, Debian, Linux Mint, Kali Linux, Astra Linux и другие) используйте команду:
apt -y install openssh-server
RPM
Для дистрибутивов на основе RPM (CentOS, Fedora, Red Hat Enterprise Linux, ALT Linux и другие) необходимо выполнить одну из команд ниже:
Для пакетного менеджера YUM:
yum -y install openssh-server
Для пакетного менеджера DNF:
dnf -y install openssh-server
Pacman
Для дистрибутивов на основе Pacman (Arch Linux, ArchLabs, Manjaro и другие) необходимо выполнить команду:
pacman -S openssh
Вместе с пакетом openssh-server
также автоматически устанавливается пакет openssh-client
, который представляет собой консольную утилиту SSH для подключения к удаленным серверам.
Стандартный синтаксис команды SSH выглядит следующим образом:
ssh <имя_пользователя@IP_адрес_или_доменное_имя_удаленного_хоста>
Например:
ssh alex@80.242.57.93
По умолчанию подключение происходит по 22 порту. Если же порт SSH сервера другой, то он указывается при помощи опции -p
:
ssh alex@80.242.57.93 -p 2222
Конфигурационный файл, который использует SSH-сервер, называется sshd_config
и располагается в директории /etc/ssh
. Не путайте файл SSH-сервера с файлом SSH-клиента — ssh_config
. Далее в статье будет использоваться только файл сервера — sshd_config
.
По умолчанию подключение по протоколу SSH осуществляется с помощью пароля при условии, что на этапе создания сервера не был добавлен SSH-ключ для подключения (о ключах для SSH и об их применении будет рассказано в следующей главе). В большинстве дистрибутивов Linux/Unix в конфигурации сервера SSH включена PAM-аутентификация. Это означает, что пользователь, присутствующий в операционной системе, может воспользоваться своими данными (логин и пароль) для входа по SSH. Данное условие работает, если у пользователя не используются опции nologin
и noshell
, что можно проверить можно посмотреть в файле /etc/passwd
, и ему разрешен вход по SSH (будет показано далее в статье).
Для того чтобы подключиться по SSH при помощи пароля, достаточно знать адрес необходимого сервера, а также логин и пароль пользователя. Например:
ssh alex@80.242.57.93
После ввода команды выше появится приглашение к вводу пароля. Если пароль введен правильно, то вы попадете на сервер. Пароль необходимо вводить каждый раз при подключении.
Если вы подключаетесь к серверу в первый раз, то увидите сообщение от так называемого «отпечатка пальцев» (fingerprint):
Чтобы войти на сервер, необходимо ввести yes
.
Fingerprint используется для повышения безопасности путем генерации уникального набора символов. Каждый раз при подключении к серверу ваше устройство, с которого осуществляется подключение, сравнивает ранее сгенерированную комбинацию. Если, например на сервере была переустановлена операционная система, был переустановлен SSH-сервер или же на текущем сетевом адресе произошла смена устройства, но при этом адрес остался прежним, то в таких случаях система будет предупреждать что отпечаток изменился по сравнению с первым подключением.
Использование паролей не является безопасным методом подключения, так как пароль можно попытаться подобрать. Наиболее безопасным методом аутентификации является использование SSH-ключей. О них речь пойдет в следующем разделе.
Более распространенным и более безопасным способом вместо использования паролей являются SSH-ключи.
В работе используются два типа ключей: открытый (public) и закрытый (private). Открытый ключ используется для шифрования и является публичным — если кто-то вдруг завладеет вашим открытым ключом, то ничего критичного не произойдет. В свою очередь закрытый ключ используется для расшифровки. Закрытый ключ должен храниться только у вас и не в коем случае не быть доступным для третьих лиц. Для использования ключей сначала их необходимо сгенерировать. Для генерации используется команда:
ssh-keygen
Для начала команда предложит вам выбрать директорию, в которую будут сохранены открытый и закрытый ключи. По умолчанию ключи хранятся в скрытой (символ точки) директории .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
. Синтаксис у команды следующий:
ssh-copy-id -i <полный путь до файла открытого ключа- id_rsa.pub> имя_пользователя_на_удаленном_сервере@IP_адрес_или_доменное_имя
Предположим, нам необходимо подключиться к серверу с IP адресом 82.97.250.52 без пароля, только при помощи ключа. Для этого копируем ранее сгенерированный ключ на хост 82.97.250.52:
ssh-copy-id -i /home/alex/.ssh/id_rsa.pub alex@82.97.250.52
Так как мы впервые осуществляем подключение, то нам необходимо ввести yes
:
При копировании ключа нам необходимо ввести пароль от учетной записи пользователя на удаленном хосте. Пароль необходимо вводить только один раз:
После этого ключ будет добавлен:
Теперь можно попробовать зайти на удаленный сервер:
ssh alex@82.97.250.52
Если пароль не был запрошен и вы смогли войти, то аутентификация по ключам успешно работает.
На удаленном хосте переданный открытый ключ был записан в файл authorized_keys
, который находится в скрытой директории .ssh
в домашней директории того пользователя, из-под которого осуществлялось подключение:
Так как использование паролей при подключении по SSH не является безопасным, то рекомендуется отключить данный метод аутентификации и оставить только вход по ключам.
Для этого откроем на редактирование конфигурационный файл SSH-сервера (sshd_config
) при помощи любого текстового редактора:
nano /etc/ssh/sshd_config
Далее необходимо найти параметр PasswordAuthentication
и изменить значение на no
:
PasswordAuthentication no
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Будьте предельно осторожны при выключении аутентификации по паролю, не убедившись перед этим, что аутентификация по ключам корректно работает. Если вход по ключам не будет работать, а аутентификация по паролю будет выключена — вы не сможете попасть на сервер при помощи SSH. Для решения данной проблемы вы можете использовать веб-консоль которая находится в разделе «Консоль» в панели управления сервера:
Авторизуйтесь под необходимой учетной записью, далее верните значение параметра PasswordAuthentication
в yes
и перезапустите демон SSH.
По умолчанию сервер SSH работает по 22 порту. Порт можно изменить. Для этого в файле sshd_config
найдите строку Port
. Раскомментируйте при необходимости (удалите символ решетки #
) и задайте любой порт, который не занят на вашем сервере, в диапазоне от 0 до 65536 (кроме портов 0-1023, так как данный диапазон зарезервирован для популярных приложений).
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Теперь при подключении используйте опцию -p
, в которой будет задан новый порт, например:
ssh alex@82.97.250.52 -p 2224
По умолчанию в некоторых дистрибутивах разрешено подключение из-под учетной записи root
. Так как root
-пользователь обладает всеми привилегиями в системе и может выполнять многие опасные действия, то необходимо отключить вход для пользователя root
.
Для этого в файле sshd_config
найдите строку PermitRootLogin
и задайте ей значение no
:
PermitRootLogin no
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Теперь при попытке входа от имени root
-пользователя будет отображаться ошибка: Permission denied, please try again.
Помимо отключения разрешения на вход для root-пользователя, вы также можете разрешать или запрещать подключение только для определенных пользователей. Для этого в конфигурационном файле sshd_config
используются параметры AllowUsers
и DenyUsers
:
AllowUsers
разрешает определённым пользователям подключение по SSH. Разрешить доступ можно как одному пользователю, так и нескольким сразу, для этого их необходимо перечислить через пробел. Предполагается, что пользователи, которым разрешено подключение, уже созданы в операционной системе.DenyUsers
запрещает определённым пользователям подключение по SSH. Запретить доступ можно как одному пользователю, так и нескольким сразу, для этого их необходимо перечислить через пробел. Предполагается, что пользователи которым запрещено подключение, уже созданы в операционной системе.Например, разрешим доступ только для пользователей test
и admin
:
AllowUsers test admin
И запретим доступ для пользователей nginx
и websrv
:
DenyUsers nginx websrv
Также разрешать и запрещать доступ можно и для групп:
AllowGroups www
DenyGroups db
После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:
systemctl restart ssh
Теперь пользователи, которым запрещен доступ, при попытке входа будут получать ошибку Permission denied, please try again.
Подготовили для вас выгодные тарифы на облачные серверы
Протокол SSH является незаменимым средством для подключения к вашим удаленным серверам. Помимо встроенного шифрования, вы также можете гибко настраивать конфигурацию SSH-сервера с целью повышения защиты.