Перейти к содержимому

Защита SSH: ключи, root и смена порта

Отключить вход по паролю, ограничить root, сменить порт с учётом socket-активации в новых Ubuntu.

Уровень
Средний
Время чтения
3 мин чтения
Обновлено
Проверено на
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Содержание
  1. Куда писать настройки
  2. Проверка и применение
  3. Смена порта
  4. Частые ошибки

Любой сервер с открытым SSH через несколько минут после запуска начинают перебирать боты. С паролями это реальный риск, с ключами — только шум в журналах. Настройка занимает десять минут.

Куда писать настройки

В Ubuntu 22.04/24.04 и Debian 12 основной файл /etc/ssh/sshd_config в самом начале подключает файлы из /etc/ssh/sshd_config.d/. Для каждого параметра действует первое найденное значение, поэтому файл с именем 00-… перекрывает остальные — в том числе 50-cloud-init.conf, который в облачных образах иногда включает вход по паролю.

bash
$ nano /etc/ssh/sshd_config.d/00-hardening.conf
/etc/ssh/sshd_config.d/00-hardening.conf
# Только ключиPasswordAuthentication noKbdInteractiveAuthentication no# root — только по ключуPermitRootLogin prohibit-password# Меньше попыток на одно соединениеMaxAuthTries 3LoginGraceTime 30

Если вы работаете под отдельным пользователем с sudo, root можно запретить совсем: PermitRootLogin no. Дополнительно можно разрешить вход только нужным пользователям: AllowUsers deploy.

Проверка и применение

bash
$ sshd -t$ systemctl restart ssh

sshd -t ничего не выводит, если ошибок нет. Итоговые значения, с учётом всех файлов, покажет команда:

bash
$ sshd -T | grep -Ei "^(passwordauthentication|permitrootlogin|maxauthtries|port) "

Смена порта

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

bash
$ ufw allow 2222/tcp

Добавьте в 00-hardening.conf строку Port 2222. Дальше шаги зависят от системы.

Ubuntu 24.04 (socket-активация)

Начиная с Ubuntu 22.10 порт слушает не сам sshd, а systemd через ssh.socket. Настройки порта из sshd_config переносятся в сокет при daemon-reload, поэтому перезапускать нужно сокет:

bash
$ sshd -t$ systemctl daemon-reload$ systemctl restart ssh.socket

Ubuntu 22.04 и Debian 12

bash
$ sshd -t$ systemctl restart ssh

Проверьте, что сервер слушает новый порт, и подключитесь в новом окне:

bash
$ ss -tlnp | grep 2222$ ssh -p 2222 [email protected]

Только после успешного входа закройте старый порт: ufw delete allow OpenSSH.

Частые ошибки

  • На Ubuntu 24.04 изменили Port и перезапустили только ssh.service — сервер продолжает слушать 22-й порт. Нужен daemon-reload и перезапуск ssh.socket.
  • Сменили порт, но не открыли его в фаерволе — доступ пропадает. Исправляется через VNC-консоль.
  • Правка в конце sshd_config не действует. Её перекрывает файл из sshd_config.d — смотрите итог через sshd -T.

Дочитайте до конца — статья засчитается в обучении автоматически.

  • SSH
  • sshd_config
  • безопасность
  • PermitRootLogin
  • порт SSH
  • ssh.socket

Статья помогла?