Отключение парольного входа 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 сообщает об ошибке.
Рекомендуемый порядок работы
- Настроить SSH-ключ.
- Проверить вход по ключу во втором окне.
- Создать drop-in-файл.
- Выполнить
sshd -t. - Выполнить
systemctl reload ssh. - Проверить новый вход.
- Проверить отказ парольной авторизации.
- Только после этого закрыть старую сессию.
Итог
После выполнения инструкции:
- отключена парольная SSH-аутентификация;
- отключена keyboard-interactive аутентификация;
- запрещён прямой вход
root; - сохранён вход по публичному ключу;
- конфигурация проверена до применения;
- выполнена проверка нового подключения;
- подготовлен безопасный способ отката.
Такая настройка должна применяться только после подтверждённого доступа по SSH-ключу.