Краткая инструкция по переходу на аутентификацию только по SSH-ключу с полным запретом входа по паролю и для
пользователя root.
ssh root@193.32.179.138 (по паролю)⚠️ Важно: НЕ закрывайте текущую SSH-сессию, пока не убедитесь, что вход по ключу работает в отдельном окне. Иначе можно потерять доступ к серверу.
# Проверяем, есть ли уже ключ
ls -la ~/.ssh
Если есть файлы id_ed25519 / id_ed25519.pub — ключ уже создан, переходите к шагу 3.
# Генерируем ключ (ed25519 — современный и надёжный алгоритм)
ssh-keygen -t ed25519 -C "avk27@local"
# На вопрос о пути — Enter (по умолчанию ~/.ssh/id_ed25519)
# На вопрос о пароле (passphrase) — рекомендуем задать для доп. защиты
# Способ 1 — через ssh-copy-id (потребуется пароль root)
ssh-copy-id root@193.32.179.138
# Способ 2 — вручную, если ssh-copy-id недоступен
cat ~/.ssh/id_ed25519.pub | ssh root@193.32.179.138 \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && \
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
# Вход должен сработать БЕЗ запроса пароля root
ssh root@193.32.179.138
✅ Если вошли без пароля — ключ работает. Только после этого переходите к настройке сервера.
Все команды выполняются на сервере 193.32.179.138 (в уже открытой SSH-сессии).
# Создаём нового пользователя (замените 'mesca' на свой логин)
adduser mesca
# Даём права sudo
usermod -aG sudo mesca
# Копируем ключ root новому пользователю
rsync --archive --chown=mesca:mesca ~/.ssh /home/mesca/
# Резервная копия конфига
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# Открываем основной конфиг
nano /etc/ssh/sshd_config
Приводим строки к виду (раскомментировать при необходимости):
PermitRootLogin no # запрет входа для root
PasswordAuthentication no # запрет входа по паролю
PubkeyAuthentication yes # разрешить вход по ключу
KbdInteractiveAuthentication no # запрет интерактивного ввода пароля
UsePAM yes
ℹ️ В Ubuntu 24.04 эти директивы могут быть переопределены в /etc/ssh/sshd_config.d/*.conf.
Проверьте и приведите к тому же виду:
# Проверяем переопределения
grep -r PasswordAuthentication /etc/ssh/sshd_config.d/
grep -r PermitRootLogin /etc/ssh/sshd_config.d/
# При необходимости отредактируйте файлы в /etc/ssh/sshd_config.d/
# Например: nano /etc/ssh/sshd_config.d/50-cloud-init.conf
# Проверяем синтаксис (должно быть без ошибок)
sshd -t
# Перезапускаем службу
systemctl restart ssh
systemctl status ssh
# Полностью блокируем пароль root (вход по-прежнему возможен через sudo)
passwd -l root
НЕ закрывая текущую сессию, в новом окне терминала проверьте:
# Должно пустить по ключу под обычным пользователем
ssh mesca@193.32.179.138
# Проверка, что root больше не пускает
ssh root@193.32.179.138
# Ожидаемый результат: Permission denied (publickey)
# Проверка, что пароль не запрашивается
ssh -o PubkeyAuthentication=no mesca@193.32.179.138
# Ожидаемый результат: Permission denied (publickey)
Если все три проверки прошли как описано — настройка завершена корректно, старую сессию можно закрыть.
~/.ssh = 700,
authorized_keys = 600, владелец — ваш пользователь.
sshd_config.d/: именно она имеет приоритет над основным
конфигом.
journalctl -u ssh -n 50 --no-pager или tail -f
/var/log/auth.log.
~/.ssh/config на локальной машине для короткого подключения:
Host avk
HostName 193.32.179.138
User mesca
IdentityFile ~/.ssh/id_ed25519
После этого подключение: ssh avk
last -n 20 и who.