Вход по SSH-ключу и запрет входа по паролю
Создаём ключ ed25519, кладём его на сервер, проверяем и отключаем пароль и root так, чтобы cloud-init не вернул всё обратно. Ubuntu, Debian, AlmaLinux.

Пароль можно подобрать, и боты занимаются этим круглосуточно. Ключ ed25519 подобрать нельзя, поэтому правильная схема такая: входим по ключу, пароль и вход под root отключаем. Делается за десять минут, но порядок шагов важен — иначе легко остаться снаружи.
План:
- Создать отдельного пользователя вместо root.
- Создать ключ на своём компьютере.
- Положить публичную часть на сервер.
- Проверить вход по ключу в новом окне.
- Только после этого отключить пароль и root.
Понадобится доступ под root по паролю — IP и пароль из кабинета.
1. Отдельный пользователь
Ubuntu и Debian:
adduser admin
usermod -aG sudo admin
AlmaLinux, Rocky, CentOS, Oracle Linux:
adduser admin
passwd admin
usermod -aG wheel admin
adduser спросит пароль и несколько необязательных полей — их пропускаем клавишей Enter. Пароль понадобится для sudo.
2. Ключ на вашем компьютере
Команда одна и та же в Терминале macOS и Linux и в PowerShell на Windows:
ssh-keygen -t ed25519 -a 64 -C "my-laptop"

- Куда сохранить — Enter, путь по умолчанию
~/.ssh/id_ed25519. - Passphrase — лучше задать. Это пароль на сам файл ключа: если ноутбук украдут, сервер не достанется вместе с ним. Агент SSH (встроен в macOS и Windows) запомнит passphrase на время сессии.
В папке .ssh появятся два файла: id_ed25519 — приватный ключ, он никогда не покидает ваш компьютер, и id_ed25519.pub — публичный, его можно отдавать кому угодно.
Если
id_ed25519.pubуже есть, ключ у вас уже создан — используйте его, не перезаписывайте.
Приватный ключ не пересылают в мессенджерах, не кладут в облако и не копируют на сервер. Наружу идёт только .pub.
3. Публичный ключ на сервер
macOS и Linux:
ssh-copy-id admin@IP_СЕРВЕРА
Windows (PowerShell), потому что ssh-copy-id там нет:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh admin@IP_СЕРВЕРА "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Пароль пользователя admin спросят в последний раз.
Если вы уже вошли на сервер под root и ключ root’а хотите отдать новому пользователю, вместо копирования с компьютера можно сделать на сервере:
rsync --archive --chown=admin:admin ~/.ssh /home/admin
4. Проверка в новом окне
Текущее окно с сессией не закрывайте. В новом:
ssh admin@IP_СЕРВЕРА
sudo whoami
Пароль от сервера спрашиваться не должен — максимум passphrase от ключа. sudo whoami выводит root. Если что-то не так, разбираемся до следующего шага: ssh -v admin@IP_СЕРВЕРА покажет, какие ключи пробовал клиент и почему сервер их отверг.
5. Отключаем пароль и root
На Ubuntu и Debian конфигурация SSH читается не только из /etc/ssh/sshd_config, а ещё из файлов в /etc/ssh/sshd_config.d/, причём первое встреченное значение побеждает, а Include стоит в самом начале основного файла. Во многих облачных образах лежит 50-cloud-init.conf с PasswordAuthentication yes, и правка основного файла ничего не меняет. Посмотрите, что уже задано:
grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
Поэтому создаём свой файл с префиксом 00, который прочитается раньше остальных:
sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
Если хотите оставить вход под root, но только по ключу — PermitRootLogin prohibit-password.
Сохраните (Ctrl+O, Enter, Ctrl+X) и проверьте, что получилось:
sudo sshd -t
sudo sshd -T | grep -Ei "permitrootlogin|passwordauthentication"

Первая команда молчит, если конфиг корректен. Вторая должна показать permitrootlogin no и passwordauthentication no. Если показывает другое — перебивает другой файл, смотрите ls /etc/ssh/sshd_config.d/.
Перезапустите SSH:
sudo systemctl restart ssh # Ubuntu, Debian
sudo systemctl restart sshd # AlmaLinux, Rocky, CentOS
6. Финальная проверка
Ещё одно новое окно:
ssh admin@IP_СЕРВЕРА # пускает
ssh root@IP_СЕРВЕРА # Permission denied
ssh -o PubkeyAuthentication=no admin@IP_СЕРВЕРА # Permission denied (publickey)
Третья команда подтверждает, что без ключа на сервер не попасть.
Если потеряли доступ
Откройте консоль сервера в кабинете tanaka.host — это прямое подключение к экрану виртуальной машины, SSH для него не нужен. Войдите под root с паролем из кабинета и удалите файл /etc/ssh/sshd_config.d/00-hardening.conf, затем systemctl restart ssh.
Несколько серверов и ключей
Опишите серверы в ~/.ssh/config на своём компьютере:
Host web
HostName 203.0.113.10
User admin
IdentityFile ~/.ssh/id_ed25519
После этого ssh web — и вы на сервере. Следующий шаг — брандмауэр и fail2ban.