Настраиваем ssh на сервере Debian trixie
prolinux
Опубликован: | 2024-02-07T03:02:00.308827Z |
Отредактирован: | 2024-02-07T03:02:00.308827Z |
Статус: | публичный |
Продолжаем настройку виртуального сервера с 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
.
Сохраняю изменения в файл, покидаю текстовый редактор и пробую попинговать только что выбранный домен.
$ ping -c 5 jazz.ru
Как видно, домен 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
на удалённом сервере. Пароль мне известен, его я создавал при установке базовой операционной системы в предыдущем выпуске этого блога.
Как видно на снимке экрана, в отчёте программа сообщила, что один ключ добавлен на сервер, и мы теперь можем подключиться к серверу с этим ключом. Подключаюсь.
ssh jazz@jazz.ru
Поскольку SSH-клиенту теперь доступен ключ, а ключ этот требует ввода пароля, программа запросила пароль для этого ключа. Нужно ввести пароль, который мы придумали при создании ключа.
Ввожу.., пароль при этом на терминале не отображается, жму enter
.
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
Как видно на снимке экрана, после ввода пароля ключа соединение благополучно установлено, о чём свидетельствует приглашение командной строки терминала. Кроме этого, видно, что сервер отклонил запрос на подключение по стандартному порту SSH (22
). Цель этой демонстрации достигнута, SSH-сервер настроен и готов к работе.