Пароль можно подобрать, а SSH-ключ нельзя. Поэтому самая полезная мера защиты сервера – входить по ключу и полностью запретить вход по паролю. Тогда боты, которые круглосуточно перебирают пароли, просто упрутся в закрытую дверь.
Вот что мы сделаем по шагам.
- создадим отдельного пользователя вместо root;
- сделаем SSH-ключ на вашем компьютере;
- скопируем ключ на сервер;
- проверим вход по ключу;
- отключим вход по паролю и под root.
Что понадобится
Для начала нужен доступ к серверу по SSH под root. IP-адрес и пароль есть в письме после заказа и в «Инструкции» в личном кабинете, где её найти, мы показали в статье о заказе VPS.
1. Создайте отдельного пользователя
Команды выполняются на сервере, под root.
Работать под root каждый день небезопасно, ведь одна ошибка или украденный пароль дают злоумышленнику полный доступ. Поэтому создадим обычного пользователя и дадим ему право выполнять команды администратора через sudo.
# Создаём пользователя admin (имя можно выбрать любое)
# Команда попросит придумать пароль, остальные вопросы можно
# пропустить клавишей Enter
adduser admin
# Добавляем пользователя в группу sudo, чтобы он мог выполнять
# команды администратора
usermod -aG sudo admin# Создаём пользователя admin (имя можно выбрать любое)
adduser admin
# Задаём ему пароль
passwd admin
# На этих системах администраторы входят в группу wheel
usermod -aG wheel adminПароль пользователя ещё пригодится, его будет спрашивать sudo. А вот для входа на сервер он скоро станет не нужен.
2. Создайте SSH-ключ на своём компьютере
Эта команда выполняется на своём компьютере. В Windows откройте PowerShell, в macOS и Linux – Терминал.
# Создаём ключ типа ed25519, это современный и надёжный вариант
ssh-keygen -t ed25519 -a 64Программа задаст пару вопросов.
- куда сохранить ключ – просто нажмите Enter;
- passphrase – пароль к самому ключу. Его лучше задать, тогда украденным файлом ключа без этого пароля никто не воспользуется.
В итоге появятся два файла в папке .ssh вашего пользователя.
id_ed25519– приватный ключ, он остаётся только у вас;id_ed25519.pub– публичный ключ, его мы положим на сервер.
Приватный ключ никому не передавайте
Файл id_ed25519 – это ваш приватный ключ. Не отправляйте его в мессенджерах, не загружайте его в облако и не выкладывайте на сервер.
Наружу уходит только файл с окончанием .pub.
3. Скопируйте ключ на сервер
Команда выполняется на своём компьютере. Вместо SERVER_IP подставьте IP-адрес сервера.
# Копируем публичный ключ на сервер для пользователя admin
ssh-copy-id admin@SERVER_IP# В Windows нет команды ssh-copy-id, поэтому передаём ключ одной
# строкой:
# создаём на сервере папку .ssh, дописываем ключ в
# authorized_keys и выставляем нужные права
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh admin@SERVER_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Команда попросит пароль пользователя admin. Это последний раз, когда он нужен для входа.
4. Проверьте вход по ключу
Подключитесь со своего компьютера, в новом окне терминала.
# Подключаемся под новым пользователем. Пароль от сервера
# спрашиваться не должен,
# максимум passphrase от ключа, если вы её задали
ssh admin@SERVER_IP
# Уже на сервере проверяем, что sudo работает. Команда должна
# вывести root
sudo whoamiЕсли вы подключаетесь через Termius, добавьте ключ в его настройки и укажите пользователя admin. Как подключаться через Termius, мы показали в отдельной статье.
5. Отключите вход по паролю и под root
Не закрывайте старое подключение
Пока вы не убедились, что вход по ключу работает в новом окне, держите прежнюю сессию открытой. Если что-то пойдёт не так, через неё всё легко вернуть.
Настройки SSH в Ubuntu и Debian читаются сразу из нескольких файлов в папке /etc/ssh/sshd_config.d/, и побеждает та настройка, что встретилась первой. Например, файл 50-cloud-init.conf может разрешать вход по паролю, и тогда ваш запрет в другом файле просто не сработает. Поэтому создадим свой файл с номером 00, тогда сервер прочитает его раньше остальных.
Дальше команды выполняются на сервере.
# Создаём файл с нашими настройками SSH и открываем его в
# редакторе nano
sudo nano /etc/ssh/sshd_config.d/00-security.confВставьте в файл эти строки.
# Запрещаем вход под root напрямую
PermitRootLogin no
# Запрещаем вход по паролю
PasswordAuthentication no
# Оставляем вход по ключам
PubkeyAuthentication yesЧтобы сохранить файл, нажмите Ctrl + O и Enter, а чтобы выйти из редактора, Ctrl + X.
Теперь проверим настройки и применим их.
# Проверяем настройки на ошибки. Если команда ничего не вывела,
# всё в порядке
sudo sshd -t
# Смотрим, какие настройки действуют на самом деле
sudo sshd -T | grep -E "permitrootlogin|passwordauthentication"В ответе должно быть permitrootlogin no и passwordauthentication no. Если там другое значение, значит, его перебивает другой файл. Посмотрите содержимое папки командой ls /etc/ssh/sshd_config.d/.
Осталось перезапустить SSH.
# Перезапускаем SSH, чтобы новые настройки заработали
sudo systemctl restart ssh# Перезапускаем SSH, чтобы новые настройки заработали
sudo systemctl restart sshd6. Финальная проверка
Откройте ещё одно окно терминала и проверьте оба варианта.
# Вход под admin по ключу должен работать
ssh admin@SERVER_IP
# А вход под root теперь должен заканчиваться ошибкой Permission
# denied
ssh root@SERVER_IPЕсли всё так, поздравляем, подобрать пароль к вашему серверу больше невозможно. Старую сессию можно закрывать.
Если доступ всё-таки пропал
Если доступ всё-таки пропал, откройте сервер кнопкой Консоль в списке серверов в личном кабинете. Через неё сервер открывается прямо в браузере, без SSH, и настройки можно вернуть, удалив файл /etc/ssh/sshd_config.d/00-security.conf.
Наши ресурсы
Telegram-канал: https://t.me/f3cloud_news
Сайт хостинга: https://f3cloud.com