Настраиваем ssh на сервере Debian trixie

prolinux

Опубликован:  2024-02-07T03:02:00.308827Z
Отредактирован:  2024-02-07T03:02:00.308827Z
Статус:  публичный
8
0
0

Продолжаем настройку виртуального сервера с Debian trixie на борту. Поскольку в обычной практике сервер - это удалённая машина, мы не можем получить к ней прямой доступ, мы можем управлять им только программно, подключившись к нему по сети с рабочего компьютера. Такое соединение по открытому каналу достаточно уязвимо, в современной компьютерной сети принято шифровать трафик с помощью специальной программы - SSH. В этом обзоре выполним начальные настройки безопасного соединения с удалённым сервером сети.

Настраиваем доменное имя

Напоминаю, что сервер, который я буду настраивать в этой демонстрации является виртуальным, существует только в оперативной памяти моего домашнего компьютера, и доступ к нему можно получить в виртуальной сети Virtualbox, - это своеобразный манекен, с помощью которого я отрабатываю процесс развёртывания реального VDS в реальной сети Интернет.

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

К серверу в сети Интернет можно подключиться двумя способами:

  • по IP-адресу;

  • по доменному имени.

Связать доменное имя с IP-адресом можно при помощи DNS, обычно инструменты для управления DNS предоставляет регистратор доменного имени. Но поскольку в этом обзоре мы имеем дело с виртуальным сервером Virtualbox, связать его IP-адрес с доменным именем можно при помощи файла /etc/hosts. Запускаю терминал и открываю этот файл в текстовом редакторе, в терминале.

$ sudo vim /etc/hosts

В этот файл нужно вписать одну единственную строчку, в которой указывается IP-адрес сервера, доменное имя и все его алиасы. IP-адрес мне известен, ибо в одном из предыдущих выпусков этого блога я собственными руками его настраивал. Доменное имя для сервера в виртуальной сети я могу выбрать любое, при этом следует помнить, что указав домен в файле /etc/hosts мы затеняем этот домен в сети Интернет, поэтому лучше всего выбрать домен, который мы обычно не посещаем. Для этой демонстрации я выбрал домен jazz.ru.

p0Xuyworj6.png

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

$ ping -c 5 jazz.ru

c9MtWakX8B.png

Как видно, домен jazz.ru с моей host-машины пингуется и откликается на IP-адресе виртуального сервера,можно приступать к настройке SSH.

Копируем ключ SSH

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

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

Ключ для SSH можно создать специальной программой - ssh-keygen, при этом нужно задать тип ключа. Вот как будет выглядеть команда:

$ ssh-keygen -t ed25519

На сегодняшний день ed25519 представляется мне идеальным вариантом. Программа ssh-keygen работает в интерактивном режиме и после запуска запрашивает у пользователя имя ключа и пароль, который нужно придумать и ввести два раза. По-умолчанию программа даёт ключу имя id_ed25519 - это имя ключа меня полностью устроит. Пароль для ключа можно и не создавать, но если ключ хранится на машине в общественном месте и может быть украден злоумышленниками, то лучше закрыть его паролем. В результате этого действия программа создаст пару файлов ключа, хранящих публичную и не публичную его части.

Поскольку ключ я создал на host-машине - своём домашнем компьютере, его теперь нужно скопировать на сервер по защищённому каналу. В наборе SSH-клиента есть для этого специальная программа - ssh-copy-id.

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub jazz@jazz.ru

В этой команде я указал с помощью флага -i имя файла публичной части ключа, имя пользователя операционной системы сервера - jazz, доменное имя сервера jazz.ru. Программа интерактивна, в сеансе запрашивает подтверждение на выполнение операции и пароль пользователя jazz на удалённом сервере. Пароль мне известен, его я создавал при установке базовой операционной системы в предыдущем выпуске этого блога.

QURf6NCrjp.png

Как видно на снимке экрана, в отчёте программа сообщила, что один ключ добавлен на сервер, и мы теперь можем подключиться к серверу с этим ключом. Подключаюсь.

ssh jazz@jazz.ru

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

Rf0CwOw5Vs.png

Ввожу.., пароль при этом на терминале не отображается, жму enter.

41LYZrWwPE.png

OK... Приглашение командной строки изменило свой внешний вид - это сигнал, что этот терминал с этого момента управляет операционной системой сервера, ключ сработал, подключение произошло.

Настраиваем демон SSH на сервере

SSH на сервере сети - это объект пристального внимания, атаки на сервер со стороны многочисленных злоумышленников совершаются ежедневно. Поэтому сразу следует озаботиться некоторыми настройками соединения, которые обеспечат спокойную жизнь. Демон SSH настраивается с помощью обычного текстового файла, открываю его в редакторе. На текущий момент на сервере установлена только базовая система, в ней уже есть Nano.

$ sudo nano /etc/ssh/sshd_config

В этом файле нахожу и редактирую следующие строчки:

Port 2214
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no

Я изменил порт, на котором сервер SSH слушает сеть, запретил вход пользователю root, на моём сервере для него пароль не задан, разрешил подключение с публичным ключом и запретил подключение по паролю пользователя. Это самые очевидные и простые меры предосторожности. Сохраняю изменения в файл и покидаю текстовый редактор.

Чтобы изменения вступили в силу, перезагружаю демон SSH.

$ sudo systemctl restart sshd.service

Протестировать сделанные только что изменения в настройках сервера очень просто. Выхожу.

$ exit

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

$ ssh jazz@jazz.ru -p 2214

vrMw0J77XA.png

Как видно на снимке экрана, после ввода пароля ключа соединение благополучно установлено, о чём свидетельствует приглашение командной строки терминала. Кроме этого, видно, что сервер отклонил запрос на подключение по стандартному порту SSH (22). Цель этой демонстрации достигнута, SSH-сервер настроен и готов к работе.