Бесплатная миграция IT-инфраструктуры в облако

Как подключиться к серверу по SSH: пошаговая инструкция

Александр Бархатов
Александр Бархатов
Технический писатель
26 апреля 2024 г.
9687
10 минут чтения
Средний рейтинг статьи: 3

Сегодня все чаще в работе используются серверы с установленной операционной системой семейства Linux. Для возможности удаленного доступа используется протокол прикладного уровня под названием SSH. В данной статье мы рассмотрим использование протокола SSH для подключения к удаленным Linux-серверам, а также настройку некоторых параметров с целью улучшения безопасности.

Подключение по SSH можно использовать для абсолютно любого дистрибутива, так как протокол SSH используется по умолчанию практически во всех современных дистрибутивах Unix и Linux. 

В качестве примера вся конфигурация SSH, которая будет описана в данной статье, использовалась в дистрибутиве Ubuntu версии 22.04. Однако ее без проблем можно использовать в любых других дистрибутивах, включая Debian, CentOS, Astra Linux и т.д.   

cloud

Способы подключения по протоколу 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

Для дистрибутивов на основе 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 выглядит следующим образом:

ssh <имя_пользователя@IP_адрес_или_доменное_имя_удаленного_хоста>

Например:

ssh alex@80.242.57.93

По умолчанию подключение происходит по 22 порту. Если же порт SSH сервера другой, то он указывается при помощи опции -p:

ssh alex@80.242.57.93 -p 2222

Конфигурационный файл 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 при помощи пароля, достаточно знать адрес необходимого сервера, а также логин и пароль пользователя. Например:

ssh alex@80.242.57.93

Image2

После ввода команды выше появится приглашение к вводу пароля. Если пароль введен правильно, то вы попадете на сервер. Пароль необходимо вводить каждый раз при подключении.

Если вы подключаетесь к серверу в первый раз, то увидите сообщение от так называемого «отпечатка пальцев» (fingerprint):

Image15

Чтобы войти на сервер, необходимо ввести yes

Fingerprint используется для повышения безопасности путем генерации уникального набора символов. Каждый раз при подключении к серверу ваше устройство, с которого осуществляется подключение, сравнивает ранее сгенерированную комбинацию. Если, например на сервере была переустановлена операционная система, был переустановлен SSH-сервер или же на текущем сетевом адресе произошла смена устройства, но при этом адрес остался прежним, то в таких случаях система будет предупреждать что отпечаток изменился по сравнению с первым подключением.

Использование паролей не является безопасным методом подключения, так как пароль можно попытаться подобрать. Наиболее безопасным методом аутентификации является использование SSH-ключей. О них речь пойдет в следующем разделе.  

Подключение по SSH при помощи ключей

Более распространенным и более безопасным способом вместо использования паролей являются SSH-ключи.

В работе используются два типа ключей: открытый (public) и закрытый (private). Открытый ключ используется для шифрования и является публичным — если кто-то вдруг завладеет вашим открытым ключом, то ничего критичного не произойдет. В свою очередь закрытый ключ используется для расшифровки. Закрытый ключ должен храниться только у вас и не в коем случае не быть доступным для третьих лиц. Для использования ключей сначала их необходимо сгенерировать. Для генерации используется команда:

ssh-keygen

Для начала команда предложит вам выбрать директорию, в которую будут сохранены открытый и закрытый ключи. По умолчанию ключи хранятся в скрытой (символ точки) директории .ssh, которая в свою очередь будет создана в домашней директории того пользователя, из-под которого запущена команда ssh-keygen. В данном примере ключи будут сохранены в домашней директории пользователя alex а именно в /home/alex/.ssh. Также вы можете указать другой путь и директорию куда будут сохранены ключи. Чтобы оставить путь по умолчанию, достаточно нажать на клавишу Enter:

Image4

Далее программа предложит задать passphrase — пароль для ключа. Это обеспечит дополнительный уровень защиты. Если кто-то получит доступ к вашему ключу, то ему придется подбирать еще и пароль. Однако стоит заметить, что при использовании passphrase вам придется вводить ее каждый раз при новом подключении по аналогии с использованием паролей. Passphrase можно не использовать. Для этого достаточно при появлении фраз Enter passphrase (empty for no passphrase) и Enter same passphrase again нажать на клавишу Enter:

Image14

После этого ssh-keygen сообщит о том что ключи сгенерированы и сохранены в ранее указанной директории:

Image12

Проверим содержимое директории .ssh (/home/alex/.ssh):

Image9

Где:

  • 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:

Image1

При копировании ключа нам необходимо ввести пароль от учетной записи пользователя на удаленном хосте. Пароль необходимо вводить только один раз:

Image5

После этого ключ будет добавлен:

Image10

Теперь можно попробовать зайти на удаленный сервер:

ssh alex@82.97.250.52

Если пароль не был запрошен и вы смогли войти, то аутентификация по ключам успешно работает.

На удаленном хосте переданный открытый ключ был записан в файл authorized_keys, который находится в скрытой директории .ssh в домашней директории того пользователя, из-под которого осуществлялось подключение:

Image7

Запрет на подключение при помощи пароля

Так как использование паролей при подключении по SSH не является безопасным, то рекомендуется отключить данный метод аутентификации и оставить только вход по ключам. 

Для этого откроем на редактирование конфигурационный файл SSH-сервера (sshd_config) при помощи любого текстового редактора:

nano /etc/ssh/sshd_config

Далее необходимо найти параметр PasswordAuthentication и изменить значение на no:

PasswordAuthentication no

После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:

systemctl restart ssh

Будьте предельно осторожны при выключении аутентификации по паролю, не убедившись перед этим, что аутентификация по ключам корректно работает. Если вход по ключам не будет работать, а аутентификация по паролю будет выключена — вы не сможете попасть на сервер при помощи SSH. Для решения данной проблемы вы можете использовать веб-консоль которая находится в разделе «Консоль» в панели управления сервера:

Image3

Авторизуйтесь под необходимой учетной записью, далее верните значение параметра PasswordAuthentication в yes и перезапустите демон SSH.

Смена стандартного порта SSH

По умолчанию сервер SSH работает по 22 порту. Порт можно изменить. Для этого в файле sshd_config найдите строку Port. Раскомментируйте при необходимости (удалите символ решетки #) и задайте любой порт, который не занят на вашем сервере, в диапазоне от 0 до 65536 (кроме портов 0-1023, так как данный диапазон зарезервирован для популярных приложений).

Image13

После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:

systemctl restart ssh

Теперь при подключении используйте опцию -p, в которой будет задан новый порт, например:

ssh alex@82.97.250.52 -p 2224

Запрет на подключение по SSH пользователю root

По умолчанию в некоторых дистрибутивах разрешено подключение из-под учетной записи root. Так как root-пользователь обладает всеми привилегиями в системе и может выполнять многие опасные действия, то необходимо отключить вход для пользователя root.

Для этого в файле sshd_config найдите строку PermitRootLogin и задайте ей значение no:

PermitRootLogin no

После этого сохраните изменения, выйдите из файла и перезапустите демон SSH-сервера при помощи команды:

systemctl restart ssh

Теперь при попытке входа от имени root-пользователя будет отображаться ошибка: Permission denied, please try again.

Image6

Разрешение/запрет на подключение по SSH определенным пользователям

Помимо отключения разрешения на вход для 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-сервера с целью повышения защиты.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
26 апреля 2024 г.
9687
10 минут чтения
Средний рейтинг статьи: 3
Пока нет комментариев