Отключение парольного входа SSH в Ubuntu

Безопасное отключение парольной авторизации и прямого входа root по SSH после проверки доступа по ключу.

После успешной настройки SSH-ключей можно отключить вход по паролю и запретить прямую авторизацию пользователя root. Это снижает риск подбора паролей и оставляет для удалённого доступа только проверенные ключи.

В этой инструкции рассматривается только усиление SSH-аутентификации. Настройка ключей, Fail2ban и firewall выполняется отдельно.

Проверено на: Ubuntu Server 24.04 LTS
Уровень сложности: средний
Время выполнения: около 10 минут
Требуемый доступ: пользователь с рабочим SSH-ключом и правами sudo

Перед началом

Не отключайте парольную авторизацию, пока вход по ключу не проверен в отдельном окне терминала.

В примерах используются универсальные значения:

ADMIN_USER
SERVER_IP

Их необходимо заменить на собственные.

Важно: текущую SSH-сессию нельзя закрывать до завершения всех проверок.

Проверка входа по ключу

Откройте новое окно терминала:

ssh -v ADMIN_USER@SERVER_IP

В диагностическом выводе должна присутствовать строка:

Authenticated to SERVER_IP using "publickey".

После входа проверьте пользователя и sudo:

whoami
sudo id

Если вход по ключу не работает, сначала исправьте его и только потом продолжайте.

Проверка текущей конфигурации

Посмотрите эффективные параметры SSH-сервера:

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication'

Проверьте наличие дополнительных конфигурационных файлов:

sudo ls -la /etc/ssh/sshd_config.d/

В Ubuntu удобно создавать отдельный drop-in-файл, не редактируя основной /etc/ssh/sshd_config.

Создание конфигурации hardening

Создайте файл:

sudo tee /etc/ssh/sshd_config.d/99-hardening.conf >/dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
EOF

Назначение параметров:

  • PermitRootLogin no — запрещает прямой вход root;
  • PasswordAuthentication no — отключает обычную парольную авторизацию;
  • KbdInteractiveAuthentication no — отключает интерактивную парольную авторизацию;
  • PermitEmptyPasswords no — запрещает пустые пароли;
  • PubkeyAuthentication yes — разрешает вход по ключам.

Проверка синтаксиса

Перед применением обязательно проверьте конфигурацию:

sudo sshd -t

Если команда ничего не выводит, синтаксис корректен.

При ошибке SSH укажет файл и проблемную строку.

Проверка эффективных параметров

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|kbdinteractiveauthentication|permitemptypasswords|pubkeyauthentication'

Ожидаемый результат:

permitrootlogin no
passwordauthentication no
kbdinteractiveauthentication no
permitemptypasswords no
pubkeyauthentication yes

Применение конфигурации

Перезагрузите конфигурацию без остановки текущих подключений:

sudo systemctl reload ssh

Проверьте состояние сервиса:

sudo systemctl status ssh --no-pager

Повторная проверка входа по ключу

Не закрывая текущую сессию, откройте ещё одно окно:

ssh ADMIN_USER@SERVER_IP

После входа:

whoami
sudo id

Новое подключение должно работать по ключу.

Проверка отключения пароля

Принудительно запретите клиенту использовать ключ:

ssh   -o PubkeyAuthentication=no   -o PreferredAuthentications=password   ADMIN_USER@SERVER_IP

Ожидаемый результат:

Permission denied (publickey).

Проверка запрета root

ssh root@SERVER_IP

Ожидаемый результат:

Permission denied (publickey).

Ограничение списка пользователей

При необходимости можно разрешить SSH только конкретным пользователям.

Добавьте в тот же файл:

AllowUsers ADMIN_USER

Пример полной конфигурации:

sudo tee /etc/ssh/sshd_config.d/99-hardening.conf >/dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
AllowUsers ADMIN_USER
EOF

После изменения:

sudo sshd -t
sudo systemctl reload ssh

Важно: если указать неправильное имя пользователя в AllowUsers, новый вход станет невозможен.

Дополнительные ограничения

Для обычного административного доступа можно отключить X11 forwarding:

X11Forwarding no

Если не используются SSH-туннели и agent forwarding:

AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no

Эти параметры следует отключать только тогда, когда соответствующие функции действительно не нужны.

Проверка журналов

Последние события SSH:

sudo journalctl -u ssh --since "10 minutes ago" --no-pager

Поиск успешных входов:

sudo journalctl -u ssh --since "10 minutes ago" --no-pager |
grep -E 'Accepted publickey|session opened'

Поиск отказов:

sudo journalctl -u ssh --since "10 minutes ago" --no-pager |
grep -E 'Failed|Invalid user|authentication failure'

Откат конфигурации

Если новое подключение не работает, используйте оставшуюся активную сессию.

Удалите drop-in-файл:

sudo rm -f /etc/ssh/sshd_config.d/99-hardening.conf

Проверьте конфигурацию:

sudo sshd -t

Примените откат:

sudo systemctl reload ssh

После этого снова проверьте вход.

Если все SSH-сессии уже потеряны, потребуется консоль управления VPS у провайдера.

Особенность Ubuntu 24.04

Ubuntu 24.04 использует systemd socket activation для OpenSSH. Конфигурация из /etc/ssh/sshd_config и /etc/ssh/sshd_config.d/ учитывается при формировании настроек ssh.socket.

После изменения порта SSH может потребоваться:

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh

Для обычного изменения методов аутентификации достаточно:

sudo systemctl reload ssh

Типичные проблемы

Пароль всё ещё принимается

Проверьте эффективное значение:

sudo sshd -T | grep passwordauthentication

Найдите все упоминания параметра:

sudo grep -Rni   '^[[:space:]]*PasswordAuthentication'   /etc/ssh/sshd_config   /etc/ssh/sshd_config.d/

Проверьте KbdInteractiveAuthentication:

sudo sshd -T | grep kbdinteractiveauthentication

Ключ перестал работать

Проверьте:

ls -ld ~/.ssh
ls -l ~/.ssh/authorized_keys

Рекомендуемые права:

~/.ssh                  700
~/.ssh/authorized_keys  600

Проверьте журнал:

sudo journalctl -u ssh -n 100 --no-pager

Ошибка при reload

Проверьте синтаксис:

sudo sshd -t

Не перезапускайте SSH, пока sshd -t сообщает об ошибке.

Рекомендуемый порядок работы

  1. Настроить SSH-ключ.
  2. Проверить вход по ключу во втором окне.
  3. Создать drop-in-файл.
  4. Выполнить sshd -t.
  5. Выполнить systemctl reload ssh.
  6. Проверить новый вход.
  7. Проверить отказ парольной авторизации.
  8. Только после этого закрыть старую сессию.

Итог

После выполнения инструкции:

  • отключена парольная SSH-аутентификация;
  • отключена keyboard-interactive аутентификация;
  • запрещён прямой вход root;
  • сохранён вход по публичному ключу;
  • конфигурация проверена до применения;
  • выполнена проверка нового подключения;
  • подготовлен безопасный способ отката.

Такая настройка должна применяться только после подтверждённого доступа по SSH-ключу.

← Предыдущая статья Резервное копирование файлов в Ubuntu с помощью rsync Следующая статья → Настройка UFW в Ubuntu