enru

Подключение к серверу с помощью SSH-ключей

Введение

Механизм генерации ssh-ключей был подробно описан в этой статье. Сегодня мы рассмотрим различные способы переноса открытого ключа на сервер, а также настройку дополнительных параметров безопасности.

Предварительная настройка сервера

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

первое подключение к серверу

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

Создаем нового пользователя:

adduser <имя пользователя> 

Добавляем его в группу администраторов:

adduser <имя пользователя> sudo

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

su <имя пользователя>

создание нового пользователя на сервере

Заходим в корневую папку созданного пользователя:

cd

Создаем директорию .ssh:

mkdir .ssh

Устанавливаем текущему пользователю права на чтение, запись и выполнение. Остальные пользователи и группы пользователей не имеют никаких прав.

chmod 700 .ssh

новая директория на сервере

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

Автоматическое копирование ключа для Debian/Ubuntu

На Debian/Ubuntu для автоматической передачи ключа можно использовать команду:

ssh-copy-id user@IP_server

где
user – это имя пользователя на удаленном сервере;
IP_server – IP-адрес сервера.

автоматическое копирование ключа на сервер

После копирования ключа вводим следующую команду:

ssh user@IP_server

В нашем случае она выглядит следующим образом:

ssh admin@192.168.1.160

подключение на сервер после копирования ключа

Мы зашли на удаленный сервер, ввод пароля не потребовался.
Создадим ключ ed25519 и скопируем его на сервер:

создание ключа и его копирование на сервер

Проверим на сервере созданные ключи в директории ~/.ssh

проверяем ключ в директории ~/.ssh

Откроем ключ на клиенте:

файл ключа на клиенте

Проверим содержимое файла ssh_host_ed25519 на сервере:

файл ключа на сервере

Содержимое ключей идентичны, копирование прошло успешно.

Ручное копирование ключа

Для ручного копирования ключа будем использовать утилиту scp, входящую в стандартный пакет программ для Windows 10/11, Ubuntu/Debian. Настройки будем производить на примере ОС Windows 10.
Синтаксис команды выглядит следующим образом:

scp route\ssh_key.pub user@IP-server:/home/user/.ssh/

где
route – путь до ключа
ssh_key.pub – имя ключа, расширение .pub.
user – имя пользователя на сервере
В нашем случае:

scp C:\Users\jetcry\.ssh\id_ed25519.pub admin@192.168.1.160:/home/admin/.ssh/

Появится результат выполнения команды:

пример использования scp

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

cd ~/.ssh
cat id_ed25519.pub >> authorized_keys

создание файла authorized_keys и копирование в него ключа

Открываем файл, проверяем, что все получилось:

nano authorized_keys

открываем authorized_keys с помощью текстового редактора nano

Выходим из файла с помощью Сtrl+X.

Ключ скопирован в ручном режиме.

Создание сервера на HostVDS и подключение к нему с помощью SSH-ключей

На сайте hostvds.com выберем создать новый сервер. Укажем его местоположение, подберем тарифный план и образ системы. После этого нажмем «+» в поле “SSH-ключ”.

добавление ssh-ключа на hostvds

Вставим данные нашего созданного ключа, включая его название, в открывшееся поле.

копирование ssh-ключа при создании сервера на hostvds

После этого создаем виртуальный сервер с заранее установленным ssh-ключом и операционной системой Ubuntu 22.04.

создание сервера

Как только появится IP-адрес сервера, выполним подключение через терминал. Укажем протокол ssh, IP-адрес, root в качестве пользователя.

подключение к серверу hostvds.com

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

Дополнительная защита подключения к серверу

Настройки будем выполнять в файле /etc/ssh/sshd_config. Открываем его с помощью редактора nano

sudo nano /etc/ssh/sshd_config

Укажем подключение по SSH через другой порт. Расскомментируем строчку #Port 22 и укажем любой другой номер порта из частного (динамического) диапазона операционной системы: от 49152 до 65535.

Port 59898

Если Вы хотите выбрать другой порт для работы протокола ssh, необходимо убедиться, что он не занят системой. Для этого воспользуйтесь утилитой netstat.

изменение номера порта ssh

Далее отключим возможность подключения к суперпользователю root и вход с помощью пароля.

Удаляем возможность подключения через root:

PermitRootLogin no

Удаляем возможность подключения с помощью пароля:

PasswordAuthentication no
PermitEmptyPasswords no

Указываем, что подключение идет только с помощью ключей:

PubkeyAuthentication yes

изменения параметров в sshd_config

Сохраняем: Ctrl+O. Enter (соглашаемся с именем сохраняемого файла).

Выходим из файла с помощью Сtrl+X.

Переходим в директорию sshd_config:

cd /etc/ssh/sshd_config

Проверяем наличие там дополнительных файлов конфигурации командой ls

дополнительные файлы конфигурации

Запрещаем подключение с помощью пароля (меняем “yes” на “no”)

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

Перезапускаем службу ssh

sudo systemctl restart ssh

Перезапускаем службу ssh

Теперь при подключении к пользователям root и admin по ssh будет ошибка. Подключение будет доступно только при указании верного номера порта для протокола ssh.

невозможность подключения со стандартными параметрами

Если на клиенте перенести ключи из папки .ssh, то подключение будет так же запрещено, даже с указанием номера порта

невозможно подключиться без ключа

Укажем с помощью параметра -i, какой ключ следует использовать для подключения:

ssh admin@192.168.1.160 -i C:\Users\jetcry\id_ed25519 -p 59898

подключение с указанием ключа и номера порта

Вход выполнен. Мы завершили настройку дополнительной безопасности при подключении к серверу.

Краткие итоги

  1. Использование SSH-ключей для аутентификации обеспечивает максимальный уровень безопасности при подключении к удаленному серверу.
  2. Закрытый ключ остается на клиентской машине, открытый копируется на сервер.
  3. Команда ssh-copy-id – автоматическое копирование ключа в Ubuntu/Debian.
  4. Утилита scp – копирование ключа в ручном режиме.
  5. Для обеспечения дополнительной безопасности измените номер порта для протокола ssh, удалите возможность подключения к суперпользователю root и запретите использование паролей.

Еще из раздела